我正在开发一个具有高度异步设计的iOS应用程序。在某些情况下,单个“操作”可能会排队执行许多子块,这些子块将异步执行并接收其响应(对远程服务器的调用)。任何一个子块都可能以错误状态完成执行。如果任何一个子块出现错误,任何其他子块都应该被取消,错误状态应该向上传递到父级,并执行父级的错误处理块。
我想知道在这种环境下可能推荐的设计模式和其他技巧是什么?
我知道GCD的dispatch_group_async和dispatch_group_wait功能。也许这个应用程序的设计存在缺陷,但是我在使用dispatch_group_async时没有取得良好的效果,因为组似乎不会“粘性”到子块上。
谢谢!
我想知道在这种环境下可能推荐的设计模式和其他技巧是什么?
我知道GCD的dispatch_group_async和dispatch_group_wait功能。也许这个应用程序的设计存在缺陷,但是我在使用dispatch_group_async时没有取得良好的效果,因为组似乎不会“粘性”到子块上。
谢谢!
NSOperation
的世界里,为什么不使用[[NSOperationQueue mainQueue] addOperationWithBlock:^{}];
而不是dispatch_async(dispatch_get_main_queue(),^{});
?你现在的代码没问题,但是混合使用GCD调用和NSOperationQueue
调用感觉有些奇怪。 - RobdataWithContentsOfURL
后,您要将另一个块添加到此块正在运行的相同队列中,当该代码只会将某些内容分派到主队列时。为什么不立即分派到主队列。您的后台队列可能会被阻塞,但是您的主队列却没有。不确定为什么您要推迟处理错误的操作。 - Rob