[英]Waiting for two NSOperation to finish without blocking UI thread
我剛剛在這里閱讀了NSOperationQueues和NSOperation的詳細介紹。
我的問題如下。 我需要同時運行兩個操作。 當這兩個任務都完成時,我需要根據兩個已完成操作的結果進行另一次計算。 如果其中一項操作失敗,則整個操作也將失敗。 這兩個操作沒有依賴性,並且彼此完全獨立,因此我們可以並行運行它們。
如何等待這2個操作完成然后繼續進行計算? 我不想阻止UI線程。 如果我要執行另一個NSOperation,則main方法將創建兩個NSOperation並將它們添加到某個本地隊列(用於此操作),並使用waitUntilAllOperationsAreFinished
方法等待。 然后繼續計算?
我不喜歡這種方法,每次創建新操作時都需要創建本地隊列。 我可以這樣設計嗎:我可以重用一個隊列,但只等待兩個本地操作? 我可以想像,方法waitUntilAllOperationsAreFinished
可以等待所有任務完成,因此當並行執行許多任務時它將阻塞。 有設計建議嗎? 創建NSOperationQueue
是否昂貴? 在不使用NSOperation
和NSOperationQueue
情況下,在iOS中還有更好的方法嗎? 我的目標是iOS 9+設備。
在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的出色教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.