簡體   English   中英

等待兩個NSOperation完成而不阻塞UI線程

[英]Waiting for two NSOperation to finish without blocking UI thread

我剛剛在這里閱讀了NSOperationQueues和NSOperation的詳細介紹。

我的問題如下。 我需要同時運行兩個操作。 當這兩個任務都完成時,我需要根據兩個已完成操作的結果進行另一次計算。 如果其中一項操作失敗,則整個操作也將失敗。 這兩個操作沒有依賴性,並且彼此完全獨立,因此我們可以並行運行它們。

如何等待這2個操作完成然后繼續進行計算? 我不想阻止UI線程。 如果我要執行另一個NSOperation,則main方法將創建兩個NSOperation並將它們添加到某個本地隊列(用於此操作),並使用waitUntilAllOperationsAreFinished方法等待。 然后繼續計算?

我不喜歡這種方法,每次創建新操作時都需要創建本地隊列。 我可以這樣設計嗎:我可以重用一個隊列,但只等待兩個本地操作? 我可以想像,方法waitUntilAllOperationsAreFinished可以等待所有任務完成,因此當並行執行許多任務時它將阻塞。 有設計建議嗎? 創建NSOperationQueue是否昂貴? 在不使用NSOperationNSOperationQueue情況下,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM