我有一个场景,我想要并行执行三个不同的异步任务。一旦完成了所有三项任务,我就希望调用方法知道这一点并调用它自己的完成处理程序。将完成处理程序汇集在一起,以便在多次执行关闭时完成方法
下面是逻辑的这是一个非常简化的版本:
class ViewController: UIViewController {
func doTasks(with object: Object, completionHandler:() -> Void) {
// Once A, B & C are done, then perform a task
wrapupTask()
// When task is complete, call completionHandler
completionHandler()
}
}
fileprivate extension ViewController {
func taskA(with object: Object, completionHandler:() -> Void) {
// Do something
completionHandler()
}
func taskB(with object: Object, completionHandler:() -> Void) {
// Do something
completionHandler()
}
func taskC(with object: Object, completionHandler:() -> Void) {
// Do something
completionHandler()
}
}
我可以很容易链中的处理程序一起,但随后的任务可能会需要更长的时间和代码会吸。
我考虑的另一个项目是,每次增加一个简单的计数器任务完成了,那么,一旦命中3分,然后将通过这样的调用wrapupTask():
var count: Int {
didSet {
if count == 3 {
wrapupTask()
}
}
}
另一种选择我有考虑的是创建一个操作队列,然后将任务加载到其中,然后依赖于何时运行我的总结任务。一旦队列为空,它将调用完成处理程序。但是,这看起来比我想要完成的更多工作。
我的希望是有更好的东西,我只是想念。
您是否检查过['DispatchGroup'](https://developer.apple.com/reference/dispatch/dispatchgroup)? – OOPer
@OOPer打我吧。 :)另外,CodeBender,请注意操作队列也不是一个不好的解决方案。 – matt