-1

私の場合、アプリの起動時に を使用して 3 つの Web API を呼び出したいと考えていますNSURLSessionDataTask。APIごとに3つの異なるメソッドがあり、各メソッド内に1つありNSURLSessionDataTaskます。

これらの 3 つのメソッドが連続して実行されるようにコードを整形したいと考えています。メソッド B はメソッド A の応答に依存し、メソッド C はメソッド B の応答に依存するためです。各メソッドは、API 応答を取得した後、いくつかのデータベース操作も実行します。したがって、、、およびのシリアル実行がmethodA必要methodBですmethodC

私はこれが論理的なことであることを知っていますが、dispatch_semaphore_torを使用したいのです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 *************");

上記のコードは最初の方法でスタックしています。

4

1 に答える 1