dev*_*OP1 5 asynchronous swift operationqueue
我需要运行多个函数,并且函数的执行顺序非常重要。我有两个需要运行的非异步函数,然后需要运行两个异步函数。所有函数必须在前一个函数完成后执行。
到目前为止我有以下内容。但是,异步函数似乎并不遵循我所列出的依赖关系。队列开始后,两个异步函数都会立即执行。
我有什么遗漏的吗?任何帮助表示赞赏!:)
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)
Run Code Online (Sandbox Code Playgroud)
如果要串行运行操作,则必须将maxConcurrentOperationCount队列的值限制为 1。这将确保一次仅执行一项操作。
此外,BlockOperation一旦所有块返回,例如当您的asyncFunc1and
asyncFunc2函数返回您的BlockOperation信号完成时,就会完成。因此,如果在异步函数内调用任何URLSessionTask操作,该操作将在任务完成之前完成。您必须通过继承Operation类并重写isAsynchronous属性来创建自己的异步操作,并在内部异步任务完成时手动发出操作完成信号。