2012-07-31 77 views
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; 

完成块包含一个名为array[A-C]的三个数组的对象。如果有任何子调用失败,则将对象中的相应数组简单地设置为零。

代替嵌套这三个区块,并呼吁失败完成前面的下一个(这变得非常凌乱)的 - 我想要做类似下面的使用GCD:

  1. 添加所有调用队列
  2. 等到所有调用完成(调用成功或失败块)
  3. 合并所有完成块的结果并调用loadAll方法的完成块。

我知道这是可能的GCD与同步调用,但我不知道如何实现这与我的三个异步“子调用”。

回答

3

阅读调度组 - 您可以对它们进行同步等待。真的,杂乱是错误的词 - 有点复杂可能会说明它更好。我已经很好运用嵌套的调度块并使用组来等待中间结果。您也可以使用dispatch_async_barrier来阻止已经在队列中的块在该块执行之前完成。块可以将块添加到他们的调度队列中!

我记得存在依赖关系,但我现在在CGD文献中找不到该部分。

我真的建议你做的是用铅笔在一张纸上画出来,一旦你说服你自己,你就知道它的上班如何开始编码。