我刚刚阅读了NSOperationQueues和NSOperation here的详细介绍。
我的问题如下。我需要同时运行两个操作。当这两个任务都完成时,我需要根据两个已完成操作的结果进行另一次计算。如果其中一项操作失败,则整个操作也将失败。这两个操作没有依赖性,并且彼此完全独立,因此我们可以并行运行它们。
如何等待这2个操作完成然后继续进行计算?我不想阻止UI线程。如果我要执行另一个NSOperation,则主要方法是创建两个NSOperation,将它们添加到某个本地(用于此操作)队列中,并等待waitUntilAllOperationsAreFinished
方法。然后继续计算吗?
我不喜欢这种方法,每次创建新操作时都需要创建本地队列。我可以这样设计吗:我可以重用一个队列,但只等待两个本地操作?我可以想象方法waitUntilAllOperationsAreFinished
可以等到所有任务都完成后,才能在并行执行许多任务时阻塞。有设计建议吗?创建NSOperationQueue
昂贵吗?在iOS中,如果不使用NSOperation
和NSOperationQueue
,还有更好的方法吗?我的目标是iOS 9+设备。
答案 0 :(得分:0)
在Swift 4中,您可以这样操作:
let group = DispatchGroup()
// async
DispatchQueue.global().async {
// enter the group
group.enter()
taskA(onCompletion: { (_) in
// leave the group
group.leave()
})
group.enter()
taskB(onCompletion: { (_) in
group.leave()
})
}
group.notify(queue: DispatchQueue.main) {
// do something on task A & B completion
}
还有raywenderlich.com上有关GCD的出色教程。