Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
969 of 1492 menu
◀ ▶

AggregateException

AggregateException часто появляется у задач: вызов Wait() или Result у Task с ошибкой прячет исходный сбой внутри агрегата. При await то же исключение пробрасывают напрямую, без обёртки. Список сбоев смотрят в InnerExceptions.

Синтаксис

try { Task.Run(() => throw new Exception()).Wait(); } catch (AggregateException) { }

Пример

Давайте поймаем AggregateException от Wait():

using System; using System.Threading.Tasks; class Program { static void Main() { try { Task.Run(() => { throw new InvalidOperationException("abcde"); }).Wait(); } catch (AggregateException) { Console.WriteLine("fail"); } } }

Результат выполнения кода:

"fail"

Пример

Давайте прочитаем сообщение первого вложенного сбоя:

using System; using System.Threading.Tasks; class Program { static void Main() { try { Task.Run(() => { throw new InvalidOperationException("abcde"); }).Wait(); } catch (AggregateException ex) { Console.WriteLine(ex.InnerExceptions[0].Message); } } }

Результат выполнения кода:

"abcde"

Пример

Давайте создадим агрегат из двух исключений вручную:

using System; class Program { static void Main() { var ex = new AggregateException( new InvalidOperationException("abcde"), new InvalidOperationException("12345")); Console.WriteLine(ex.InnerExceptions.Count); } }

Результат выполнения кода:

2

Смотрите также

  • InnerExceptions,
    коллекция всех вложенных сбоев
  • метод Flatten,
    который снимает вложенность агрегатов
  • метод Handle,
    который разбирает каждый сбой
  • Exception,
    базовый тип исключений
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить