我有一個場景,我想要並行執行三個不同的異步任務。一旦完成了所有三項任務,我就希望調用方法知道這一點並調用它自己的完成處理程序。將完成處理程序彙集在一起,以便在多次執行關閉時完成方法
下面是邏輯的這是一個非常簡化的版本:
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