使 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)
OperationBlock
是 Operation
的子类,它实现了 cancel()
函数和 isCanceled
属性.
如果operation1
失败,想阻止operation2
继续,可以在第二个操作对象上调用cancel()
函数。
您的代码负责 checking/polling isCanceled
属性 并采取适当的措施来清理和停止您的操作。
您必须手动取消相关操作。 Operation
有一个 dependencies
数组,其中包含取决于操作的所有操作。在 operation1
中您检测到失败的地方,循环遍历 dependencies
数组并对数组中的每个操作调用 cancel()
。
调用 cancel()
并不总是足以真正取消操作。一般设置是 start()
函数的开头检查 isCancelled
布尔值,如果它是 true
,returns 则不执行任务。所以操作 "executes" 但不做实际工作。如果您已覆盖 start()
,则必须自己执行此操作。
所有这些都需要在 isFinished
设置为 true
之前完成。
在简单的情况下 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()
函数。
您的代码负责 checking/polling isCanceled
属性 并采取适当的措施来清理和停止您的操作。
您必须手动取消相关操作。 Operation
有一个 dependencies
数组,其中包含取决于操作的所有操作。在 operation1
中您检测到失败的地方,循环遍历 dependencies
数组并对数组中的每个操作调用 cancel()
。
调用 cancel()
并不总是足以真正取消操作。一般设置是 start()
函数的开头检查 isCancelled
布尔值,如果它是 true
,returns 则不执行任务。所以操作 "executes" 但不做实际工作。如果您已覆盖 start()
,则必须自己执行此操作。
所有这些都需要在 isFinished
设置为 true
之前完成。