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