Подтвердить что ты не робот

Разница между OnlyOnRanToCompletion и NotOnFaulted?

Эти два значения взяты из перечисления TaskContinuationOptions. Я немного не уверен, какой из них использовать.

Другую пару, с которой я запутался, - это NotOnRanToCompletion и OnlyOnFaulted.

Эта формулировка немного сбивает меня с толку, и каждое значение каждой пары, похоже, функционирует одинаково. Я что-то пропустил?

4b9b3361

Ответ 1

Да: если что-то отменено, это не было ни ошибкой, ни побегом к завершению; поэтому он будет обрабатываться NotOnRanToCompletion, но не OnlyOnFaulted.

Итак:

NotOnRanToCompletion | NotOnFaulted == OnlyOnCancelled
NotOnCanceled        | NotOnFaulted == OnlyOnRanToCompletion
NotOnRanToCompletion | NotOnCanceld == OnlyOnFaulted

Ответ 2

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

NotOnRanToCompletion означает, что продолжение не будет выполняться, если задача завершилась до завершения, то есть она будет запущена, если задача выкинула исключение или была отменена.

Итак, чтобы обобщить, если вы хотите, чтобы ваше продолжение выполнялось, если задача отменена или выбрала исключение, используйте NotOnRanToCompletion. Если вы хотите, чтобы он запускался, только если он выдал исключение, но не был отменен, используйте OnlyOnFaulted.