У меня есть метод, который создает некоторые задачи, а затем ожидает их с помощью WaitAll перед возвратом.Проблема в том, что если эти задачи были отменены, то WaitAll генерирует AggregateException , содержащее лоты TaskCanceledException s.
Это означает, что WaitAll будет генерировать исключения в двух разных обстоятельствах.:
- Исключения, которые указывают на подлинную ошибку.Это означает, что было условие, которое мы не знали, как справиться;они должны распространяться как необработанные исключения, пока они в конечном итоге не завершат процесс.
- Исключения, которые указывают, что пользователь нажал кнопку Отмена.Это означает, что задача была отменена и очищена, и программа должна продолжать работать в обычном режиме.
Последнее прямо вписывается в определение неприятного исключения : это выброшенное исключениев совершенно не исключительных обстоятельствах, поэтому я должен поймать его, чтобы возобновить нормальный поток управления.К счастью, это легко поймать, верно?Просто добавьте catch (AggregateException)
и - о, подождите, это тот же тип, который выдается при фатальной ошибке.
Мне нужно дождаться окончания выполнения задач, прежде чем я вернусь (мне нужно знать, чтоони больше не используют свои соединения с базой данных, файловые дескрипторы или что-то еще), поэтому мне нужен WaitAll или что-то подобное.И если какая-либо из задач не удалась, я хочу, чтобы эти исключения распространялись как необработанные исключения.Я просто не хочу исключения для отмены.
Как я могу запретить WaitAll
генерировать исключения для отмененных задач?