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

Make BlockOperation fail so that other dependencies don't execute

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

是否可以在 operation1 代码块内传递失败的执行?以便 operation1 无法完成并且 operation2 永远不会被执行并被处置?

let operation1 = BlockOperation {

    // do smth, which can fail

}

let operation2 = BlockOperation {

}


operation2.addDependency(operation1)

OperationBlockOperation 的子类,它实现了 cancel() 函数和 isCanceled 属性.

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

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

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

调用 cancel() 并不总是足以真正取消操作。一般设置是 start() 函数的开头检查 isCancelled 布尔值,如果它是 true,returns 则不执行任务。所以操作 "executes" 但不做实际工作。如果您已覆盖 start(),则必须自己执行此操作。

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