私の場合、アプリの起動時に を使用して 3 つの Web API を呼び出したいと考えていますNSURLSessionDataTask
。APIごとに3つの異なるメソッドがあり、各メソッド内に1つありNSURLSessionDataTask
ます。
これらの 3 つのメソッドが連続して実行されるようにコードを整形したいと考えています。メソッド B はメソッド A の応答に依存し、メソッド C はメソッド B の応答に依存するためです。各メソッドは、API 応答を取得した後、いくつかのデータベース操作も実行します。したがって、、、およびのシリアル実行がmethodA
必要methodB
ですmethodC
。
私はこれが論理的なことであることを知っていますが、dispatch_semaphore_t
orを使用したいのですdispatch_group_wait
が、それらを と組み合わせて使用する方法についてはまったく手がかりがありませんNSURLSessionDataTask
。
私はこれを試しました:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self syncA:^(BOOL success) {
NSLog(@"syncA — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self syncB:^(BOOL success) {
NSLog(@"syncB — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self syncC:^(BOOL success) {
NSLog(@"syncC — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"************* END OF SYNC *************");
上記のコードは最初の方法でスタックしています。