簡體   English   中英

如何將 OperationQueue 與異步函數一起使用?

[英]How to use OperationQueue with async functions?

我需要運行幾個函數,函數的執行順序非常重要。 我有兩個需要運行的非異步函數,然后是兩個需要在此之后執行的異步函數。 所有功能必須在之前的 function 完成后執行。

到目前為止,我有以下內容。 但是,異步函數似乎不遵循我已經列出的依賴關系。 一旦隊列開始,兩個異步函數都會執行。

有什么我想念的嗎? 任何幫助表示贊賞::)

let queue = OperationQueue()


let operation1 = BlockOperation {
    nonAsyncFunc1()
}
let operation2 = BlockOperation {
    nonAsyncFunc2()
}
let operation3 = BlockOperation {
    asyncFunc1()
}
let operation4 = BlockOperation {
    asyncFunc2()
}
                                    
operation2.addDependency(operation1)
operation3.addDependency(operation2)
operation4.addDependency(operation3)
                    
self.queue.addOperation(operation1)
self.queue.addOperation(operation2)
self.queue.addOperation(operation3)
self.queue.addOperation(operation4)

如果要串行運行操作,則必須將隊列的maxConcurrentOperationCount限制為 1。這將確保一次只執行一項操作。

此外,一旦所有塊返回, BlockOperation完成,例如,只要您的asyncFunc1asyncFunc2 function 返回您的BlockOperation信號完成。 因此,如果在您的異步 function 中,您正在調用任何URLSessionTask操作將在任務完成之前完成。 您必須通過繼承Operation class 並在內部異步任務完成時手動覆蓋isAsynchronous屬性和信號操作完成來創建自己的異步操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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