我有几个异步调用,我将在一次调用中合并:
-(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执行以下操作:
loadAll
方法的完成块。我知道这可以在GCD中使用同步调用,但我不知道如何使用我的三个异步“子调用”来实现这一点。
答案 0 :(得分:3)
阅读调度组 - 您可以对它们进行同步等待。实际上,凌乱是错误的词 - 有点复杂可能会说明它更好。我已经非常幸运地使用嵌套的调度块并使用组来等待中间结果。您还可以使用dispatch_async_barrier来阻止队列中的块在执行该块之前完成。块也可以将块添加到它们的调度队列中!
我记得存在依赖关系,但我现在在CGD文献中找不到该部分。
我真正建议你做的是用铅笔在一张纸上画出来,一旦你说服了你自己,你就知道它的工作方式如何开始编码。