InnerExceptions
У AggregateException
InnerExceptions - это список всех
сбоев, а не одно свойство
InnerException у базового
Exception.
После Task.Wait() исходная ошибка
задачи обычно лежит в этом списке.
Синтаксис
int count = agg.InnerExceptions.Count;
string text = agg.InnerExceptions[0].Message;
Пример
Давайте прочитаем Count и Message
первого элемента:
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.Count);
Console.WriteLine(ex.InnerExceptions[0].Message);
}
}
}
Результат выполнения кода:
1
"abcde"
Пример
Давайте соберём агрегат из двух исключений:
using System;
class Program
{
static void Main()
{
var ex = new AggregateException(
new InvalidOperationException("abcde"),
new InvalidOperationException("12345"));
Console.WriteLine(ex.InnerExceptions.Count);
}
}
Результат выполнения кода:
2
Пример
Давайте переберём сообщения в цикле:
using System;
class Program
{
static void Main()
{
var ex = new AggregateException(
new InvalidOperationException("abcde"),
new InvalidOperationException("12345"));
int len = 0;
foreach (var item in ex.InnerExceptions)
{
len += item.Message.Length;
}
Console.WriteLine(len);
}
}
Результат выполнения кода:
10
Смотрите также
-
AggregateException,
тип, у которого естьInnerExceptions -
метод
Flatten,
который выравнивает вложенные агрегаты -
свойство
InnerException,
одна цепочка у обычного исключения -
throw,
которым создают исходный сбой