【发布时间】:2018-11-09 20:14:19
【问题描述】:
我刚刚阅读了关于 NSOperationQueues 和 NSOperation here 的长篇介绍。
我的问题如下。我需要同时运行两个操作。当这两项任务都完成后,我需要根据两个已完成操作的结果进行另一次计算。如果其中一项操作失败,那么整个操作也应该失败。这两个操作没有依赖关系,彼此完全独立,因此我们可以并行运行它们。
如何等待这 2 个操作完成然后继续计算?我不想阻止 UI 线程。我是否应该创建另一个 NSOperation 主方法正在创建两个 NSOperation 将它们添加到某个本地(对于此操作)队列并使用 waitUntilAllOperationsAreFinished 方法等待。然后继续计算?
我不喜欢这种方法,每次创建新操作时都需要创建本地队列。我可以这样设计吗,我可以重用一个队列但只等待两个本地操作?我可以想象waitUntilAllOperationsAreFinished 方法可以等到所有任务都完成,所以当很多任务将并行执行时它会阻塞。有什么设计建议吗?创建NSOperationQueue 成本高吗?在不使用NSOperation 和NSOperationQueue 的情况下,有没有更好的方法在iOS 中做到这一点?我的目标是 iOS 9+ 设备。
【问题讨论】:
-
别等了。使用
DispatchGroup和notify你甚至可能不需要NSOperation;在并发队列上分派两个函数可能就足够了 -
这符合@Paulw11 所写的内容:stackoverflow.com/questions/41412780/…
-
看起来它是为我的问题而设计的。我只是在互联网上找不到任何示例,这些示例在通知块中重用了来自单个任务的一些计算对象。每个示例都是基于
print()的东西而没有交换数据。谢谢你们让我注意到这一点。我根本不知道 DispatchGroup。
标签: ios concurrency nsoperationqueue nsoperation