Сделайте сбой BlockOperation, чтобы другие зависимости не выполнялись - PullRequest
1 голос
/ 25 сентября 2019

В простом случае operation2 зависит от operation1, однако operation1 может дать сбой, и в этом случае мы не хотим выполнять operation2

, если возможно доставить неудачныйвыполнение внутри блока кода operation1?так что operation1 не завершается, а operation2 никогда не выполняется и не удаляется?

let operation1 = BlockOperation {

    // do smth, which can fail

}

let operation2 = BlockOperation {

}


operation2.addDependency(operation1)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Вы должны отменить зависимые операции вручную.Operation имеет массив dependencies, содержащий все операции в зависимости от операции.В месте operation1, в котором вы обнаруживаете ошибку, циклически перебирайте массив dependencies и вызывайте cancel() для каждой из операций в массиве.

Вызов cancel() не всегда достаточен для фактической отменыОперация.Общая настройка состоит в том, что начало функции start() проверяет логическое значение isCancelled и, если оно true, возвращается без выполнения задачи.Таким образом, операция «выполняется», но не выполняет фактическую работу.Если вы переопределили start(), вам придется сделать это самостоятельно.

Все это необходимо сделать до того, как для isFinished будет установлено значение true.

0 голосов
/ 25 сентября 2019

OperationBlock является подклассом Operation, который реализует функцию cancel() и свойство isCanceled.

Если operation1 завершается неудачно и хочет остановить продолжение operation2, он можетвызовите функцию cancel() для второго объекта операции.

Ваш код отвечает за проверку / опрос свойства isCanceled и принятие соответствующих действий для очистки и остановки вашей операции.

...