将多个异步调用放入队列中

时间:2012-07-31 21:46:31

标签: iphone objective-c ios cocoa-touch gdc

我有几个异步调用,我将在一次调用中合并:

-(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]的数组的对象。如果任何子调用失败,则对象中的相应数组将设置为nil。

不是嵌套这三个块而是在失败完成之前调用下一个块(这变得非常混乱) - 我想使用GCD执行以下操作:

  1. 添加所有对队列的调用
  2. 等待所有呼叫完成(调用成功或失败块)
  3. 合并完成块中的所有结果,并调用loadAll方法的完成块。
  4. 我知道这可以在GCD中使用同步调用,但我不知道如何使用我的三个异步“子调用”来实现这一点。

1 个答案:

答案 0 :(得分:3)

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

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

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