Продолжить с отмененной задачей

Я определил следующую задачу

var t = Task.Factory.StartNew(
    () => LongRunningMethod( cancellationToken ),
    cancellationToken
);

t.ContinueWith(
    Callback,
    cancellationToken,
    TaskContinuationOptions.None,
    TaskScheduler.FromCurrentSynchronizationContext()
);

Внутри LongRunningMethodя проверяю, есть ли у токена отмены запрошенная отмена, и если да, то возвращаюсь из метода. Это хорошо работает.

Однако в этом сценарии обратный вызов не вызывается. Обратный вызов вызывается , если я заменяю вторую строку выше на

t.ContinueWith(
    x => Callback( x, cancellationToken ),
    TaskScheduler.FromCurrentSynchronizationContext()
);

В этой ситуации задача по-прежнему считает, что она выполнена.

Почему не работает первый звонок? У меня сложилось впечатление, что TaskContinuationOptions.Noneозначает, что обратный вызов будет вызываться независимо от состояния потока.

Я отменяю Задание по телефону:

_cancellationTokenSource.Cancel();

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

9
задан Dai 5 February 2018 в 09:28
поделиться