Разница между OnlyOnRanToCompletion и NotOnFaulted? - PullRequest
14 голосов
/ 02 октября 2011

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

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

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

Ответы [ 2 ]

21 голосов
/ 02 октября 2011

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

Итак:

NotOnRanToCompletion | NotOnFaulted == OnlyOnCancelled
NotOnCanceled        | NotOnFaulted == OnlyOnRanToCompletion
NotOnRanToCompletion | NotOnCanceld == OnlyOnFaulted
4 голосов
/ 02 октября 2011

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

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

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

...