Parallel.Foreach исключения и отменить - PullRequest
18 голосов
/ 22 февраля 2011

Я попытался выяснить, как работают исключения и отмены для Parallel.Foreach. Кажется, что все примеры имеют дело с Задачами.

Что происходит с исключением в Parallel.Foreach?
Обернуть весь цикл в try / catch (AggregateException)?
- Будут ли все другие задачи в цикле, даже задачи, которые еще не запущены, выполняться до завершения, пока не будет обнаружено исключение?

Те же вопросы для CancelationToken

1 Ответ

15 голосов
/ 22 февраля 2011

Короче говоря, исключение в каждом цикле агрегируется и представляется в виде AggregateException. Всякий раз, когда возникает исключение, запускаемые циклы могут завершаться, но дальнейшие циклы запускаться не будут. ForEach имеет много перегрузок , которые позволяют иметь локальные блоки init & finally и действие тела также принимает ParallelLoopState , который код тела цикла может использовать для проверки на наличие исключений в другом цикле, а затем прервать Самостоятельно, если необходимо.

См. эту статью , которая предоставляет дополнительную информацию

...