gpt4 book ai didi

ios - 在执行任务之前等待队列中的所有操作完成

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:28 26 4
gpt4 key购买 nike

我有一个操作子类和操作队列,maxConcurrentOperationCount = 1。

这会按我添加它们的顺序执行我的操作,这很好,但现在我需要等到所有操作都完成后再运行另一个进程。

我试图使用通知组,但由于这是在 for 循环中运行,一旦操作被添加到队列中,通知组就会触发。我如何等待所有操作离开队列,然后再运行另一个过程?

for (index, _) in  self.packArray.enumerated() {

myGroup.enter()
let myArrayOperation = ArrayOperation(collection: self.outerCollectionView, id: self.packArray[index].id, count: index)
myArrayOperation.name = self.packArray[index].id
downloadQueue.addOperation(myArrayOperation)
myGroup.leave()

}

myGroup.notify(queue: .main) {
// do stuff here
}

最佳答案

您可以使用操作依赖项在完成一系列其他操作后启动一些操作:

let queue = OperationQueue()

let completionOperation = BlockOperation {
// all done
}

for object in objects {
let operation = ...
completionOperation.addDependency(operation)
queue.addOperation(operation)
}

OperationQueue.main.addOperation(completionOperation) // or, if you don't need it on main queue, just `queue.addOperation(completionOperation)`

或者,在 iOS 13 及更高版本中,您可以使用屏障:

let queue = OperationQueue()

for object in objects {
queue.addOperation(...)
}

queue.addBarrierBlock {
DispatchQueue.main.async {
// all done
}
}

关于ios - 在执行任务之前等待队列中的所有操作完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com