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

Параллельно. Исключить и отменить

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

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

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

4b9b3361

Ответ 1

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

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