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

Метод Handle

Handle с функцией для каждого сбоя обходит InnerExceptions. Если предикат вернул true, сбой считают разобранным. Если хотя бы для одного вернуть false, Handle бросает новый AggregateException из неразобранных - его тоже перехватывают.

Синтаксис

agg.Handle(ex => { return ex is InvalidOperationException; });

Пример

Давайте разберём все сбои и выведем успех:

using System; class Program { static void Main() { var agg = new AggregateException( new InvalidOperationException("abcde")); try { agg.Handle(ex => ex is InvalidOperationException); Console.WriteLine("ok"); } catch (AggregateException) { Console.WriteLine("fail"); } } }

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

"ok"

Пример

Давайте оставим один сбой неразобранным и поймаем повторный AggregateException:

using System; class Program { static void Main() { var agg = new AggregateException( new InvalidOperationException("abcde"), new ArgumentException("12345")); try { agg.Handle(ex => ex is InvalidOperationException); } catch (AggregateException) { Console.WriteLine("fail"); } } }

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

"fail"

Пример

Давайте разберём оба типа в одном Handle:

using System; class Program { static void Main() { var agg = new AggregateException( new InvalidOperationException("abcde"), new ArgumentException("12345")); try { agg.Handle(ex => ex is InvalidOperationException || ex is ArgumentException); Console.WriteLine("ok"); } catch (AggregateException) { Console.WriteLine("fail"); } } }

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

"ok"

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

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