[英]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
完成,例如,只要您的asyncFunc1
和asyncFunc2
function 返回您的BlockOperation
信號完成。 因此,如果在您的異步 function 中,您正在調用任何URLSessionTask
操作將在任務完成之前完成。 您必須通過繼承Operation
class 並在內部異步任務完成時手動覆蓋isAsynchronous
屬性和信號操作完成來創建自己的異步操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.