在简单情况下,operation2
依赖于operation1
,但是operation1
可能会失败,在这种情况下,我们不想执行operation2
是否有可能在operation1
代码块内传递失败的执行?这样operation1
无法完成,并且operation2
从未执行并被处置?
let operation1 = BlockOperation {
// do smth, which can fail
}
let operation2 = BlockOperation {
}
operation2.addDependency(operation1)
OperationBlock
是Operation
的子类,它实现cancel()
功能和isCanceled
属性。如果operation1
失败并想停止operation2
继续,它可以调用第二个操作对象上的cancel()
函数。
您的代码负责检查/轮询isCanceled
属性,并采取适当的措施来清理和停止您的操作。
Operation
具有dependencies
数组,其中包含取决于操作的所有操作。在operation1
中检测到故障的位置,循环遍历dependencies
数组,并对数组中的每个操作调用cancel()
。调用cancel()
并不总是足以实际取消操作。常规设置是start()
函数的开头检查isCancelled
布尔值,如果为true
,则返回而不执行任务。因此,该操作“执行”,但未完成实际工作。如果您已覆盖start()
,则必须自己执行此操作。
[将isFinished
设置为true
之前需要完成所有这些操作。