Работа с AggregateException | Параллельное программирование
Инфраструктура PLINQ, класс Parallel и объекты Task автоматически маршализируют исключения потребителю, то есть исключения автоматически перехватываются и повторно генерируются для вызывающего потока. Но, к сожалению, дело не сводится просто к перехвату DivideByZeroException. Поскольку параллельные библиотеки задействуют множество потоков, вполне возможна одновременная генерация двух и более исключений. Чтобы обеспечить получение сведений обо всех исключениях, по указанной причине исключения помещаются в контейнер AggregateException, свойство InnerExceptions которого содержит каждое из перехваченных исключений.
Как инфраструктура PLINQ, так и класс Parallel при обнаружении первого исключения заканчивают выполнение запроса или цикла, не обрабатывая любые последующие элементы либо итерации тела цикла. Однако до завершения текущей итерации цикла могут быть сгенерированы дополнительные исключения. Первое возникшее исключение в AggregateException доступно через свойство InnerException.
AggregateException часто содержит другие AggregateException. Например, когда дочерняя задача генерирует исключение. Чтобы упростить обработку, можно устранить вложенность, вызвав Flatten. Данный метод возвращает новый объект AggregateException с плоским списком внутренних исключений. Это позволяет избежать перебора вложенных AggregateException и упрощает код обработки ошибок из параллельных операций.
Иногда полезно перехватывать исключения только специфических типов, а исключения других типов генерировать повторно. Метод Handle класса AggregateException предлагает удобное сокращение. Он принимает предикат исключений, который будет запускаться на каждом внутреннем исключении. Если предикат возвращает true, то считается, что исключение “обработано”. После того, как делегат запустится на всех исключениях, произойдет следующее:
– если все исключения были “обработаны” (делегат возвратил true), то исключение не генерируется повторно;
– если были исключения, для которых делегат возвратил false (“необработанные”), то строится новый объект AggregateException, содержащий такие исключения, и затем он генерируется повторно.
Учебные материалы к данному видео доступны по ссылке:
#ПараллельноеПрограммирование #AggregateException
16 views
585
179
1 week ago 00:01:00 1
Вела честный бизнес и осталась без пенсии #льготы #пособие #пенсия #женскиймирсветланыкозловой
1 week ago 01:11:25 5
Мастер-класс “Дракон“ от Марии Яговкиной
1 week ago 00:07:11 1
КАК ЗАРАБОТАТЬ 4774 USDT БЕСПЛАТНО? СЕКРЕТНЫЙ СПОСОБ ЗАРАБОТКА ЮСДТ БЕЗ ВЛОЖЕНИЙ! ( TETHER )
1 week ago 00:09:24 1
Ты забудешь слово РАБОТА. ChatGPT + Excel (Эксель + Чат ГПТ)
1 week ago 00:00:43 2
МИХАИЛ МАКЕДОНСКИЙ РАСКРЫВАЕТ СЕКРЕТЫ ВНЖ ИСПАНИИ
1 week ago 01:28:22 1
ЛУЧШЕЕ КИНО! ПРИВЕЛ ТРЁХ ЛЮБИМЫХ К МАМЕ, ЧТОБЫ РЕШИТЬ, КТО ЛУЧШЕ! В стиле jazz #МЕЛОДРАМЫ ПРО ЛЮБОВЬ
1 week ago 00:20:44 1
ОЧЕРКИ ИСТОРИИ ДРУЦКОГО КНЯЖЕСТВА. КАК КРУПНЫЙ ГОРОД СТАЛ ЗАБЫТОЙ ДЕРЕВНЕЙ?
1 week ago 00:25:36 1
Прямо по курсу! Забудьте про кастор и демпфер для УАЗ Хантер!
1 week ago 00:13:39 1
Это изменит Европу навсегда: почему экстремальные холода до –30ºC станут обыденностью
1 week ago 00:07:33 1
КАК ЗАРАБОТАТЬ 34 BNB БЕСПЛАТНО? СЕКРЕТНЫЙ ЗАРАБОТОК НА КРИПТОВАЛЮТЕ БИНАНС! ( АИРДРОП БНБ )
1 week ago 01:10:53 31
Борис Гребенщиков: как жить до и после смерти. Кучер +
1 week ago 00:04:05 1
“СЕРЕБРЯНАЯ ФАНТАЗИЯ“
2 weeks ago 00:13:56 1
ЖК Режиссер ➤большие квартиры в Краснодаре ➤цены и планировки ❗терраса ❗бассейн ❗скидки
2 weeks ago 00:32:21 1
Неадекваты, ночные бабочки и изменщики. Кто катается ночью в такси бизнес-класса
2 weeks ago 00:39:08 1
Наркокурьер поневоле. Как мафия вербует россиян
2 weeks ago 00:41:43 1
Новая Эра Судоходства! Ледокольная Приставка “Помор“ - Прорыв от ВОИР!