Метод 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,
которым создают исходные исключения