1 つの呼び出しに結合するいくつかの非同期呼び出しがあります。
-(void) loadA:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadB:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadC:(ArrayBlock)completion failure(FailureBlock):failure;
上記の呼び出しを使用する結合メソッド:
- (void) loadAll:(ObjectBlock)completion;
補完ブロックには、 という 3 つの配列を持つオブジェクトが含まれていますarray[A-C]
。子呼び出しのいずれかが失敗した場合、オブジェクト内のそれぞれの配列は単純に nil に設定されます。
これらの 3 つのブロックをネストして、失敗または前のブロックの完了時に次のブロックを呼び出す代わりに (これは非常に面倒です)、GCD を使用して次のようなことをしたいと考えています。
- すべての通話をキューに追加
- すべての呼び出しが終了するまで待ちます (成功ブロックまたは失敗ブロックのいずれかが呼び出されました)。
loadAll
完了ブロックからのすべての結果を結合し、メソッドの完了ブロックを呼び出します。
同期呼び出しを使用して GCD でこれが可能であることはわかっていますが、3 つの非同期の「子呼び出し」でこれを実現する方法がわかりません。