使BlockOperation失败,以便其他依赖项不执行

问题描述 投票:0回答:2

在简单情况下,operation2依赖于operation1,但是operation1可能会失败,在这种情况下,我们不想执行operation2

是否有可能在operation1代码块内传递失败的执行?这样operation1无法完成,并且operation2从未执行并被处置?

let operation1 = BlockOperation {

    // do smth, which can fail

}

let operation2 = BlockOperation {

}


operation2.addDependency(operation1)
swift cocoa nsoperationqueue nsblockoperation
2个回答
0
投票
[OperationBlockOperation的子类,它实现cancel()功能和isCanceled属性。

如果operation1失败并想停止operation2继续,它可以调用第二个操作对象上的cancel()函数。

您的代码负责检查/轮询isCanceled属性,并采取适当的措施来清理和停止您的操作。


0
投票
您必须手动取消相关操作。 Operation具有dependencies数组,其中包含取决于操作的所有操作。在operation1中检测到故障的位置,循环遍历dependencies数组,并对数组中的每个操作调用cancel()

调用cancel()并不总是足以实际取消操作。常规设置是start()函数的开头检查isCancelled布尔值,如果为true,则返回而不执行任务。因此,该操作“执行”,但未完成实际工作。如果您已覆盖start(),则必须自己执行此操作。

[将isFinished设置为true之前需要完成所有这些操作。

© www.soinside.com 2019 - 2024. All rights reserved.