1

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

是否可以在operation1代码块内交付失败的执行?这样就operation1无法完成并且operation2永远不会被执行并被处置?

let operation1 = BlockOperation {

    // do smth, which can fail

}

let operation2 = BlockOperation {

}


operation2.addDependency(operation1)
4

2 回答 2

1

您必须手动取消相关操作。AnOperation有一个dependencies数组,其中包含取决于操作的所有操作。在operation1您检测到故障的地方,循环遍历dependencies数组并调用数组cancel()中的每个操作。

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

所有这些都需要在isFinished设置为之前完成true

于 2019-09-26T08:39:05.587 回答
0

OperationBlockOperation实现cancel()函数和isCanceled属性的子类。

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

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

于 2019-09-25T16:47:29.773 回答