NSOperation队列操作和操作计数已弃用.如何取消特定类的操作?



本文档说operations已被弃用,没有替换函数的提示:

https://developer.apple.com/documentation/foundation/nsoperationqueue/1415168-operations?language=objc

Xcode 将可能的替代品列为addBarrierBlock:但没有文档。

我有十几个类RenderOperation的操作和一个依赖于所有RenderOperation对象的类RenderCompleteOperation操作。

我的问题是,如果我调用cancelAllOperations,我仍然需要我的单个RenderCompleteOperation运行 - 如果它仍在等待完成其依赖项,那么它的main方法将永远不会运行。

所以我需要一种方法来取消RenderOperation对象,并且不知道如何在不调用operations的情况下执行此操作。

操作可以依赖于不同队列中的操作,因此您可以将最终操作放在与工作线程操作不同的队列上,并在工作线程队列上使用cancelAllOperations

另一种选择是覆盖最终操作的cancel函数,使其不执行任何操作,并在完成任务时手动设置executingfinished

第三种选择是保留一组工作线程操作,并在循环中自己取消每个操作(无论如何,这就是cancelAllOperations所做的一切)

您可以在RenderCompleteOperation的所有依赖项上调用cancel

renderCompleteOperation.dependencies.forEach { $0.cancel() }

然后它将立即执行。

最新更新