Я пытаюсь бросить и поймать исключение AggregateException. Я не использовал исключения на С#, но поведение, которое я нашел, немного удивительно.
Мой код:
var numbers = Enumerable.Range(0, 20);
try
{
var parallelResult = numbers.AsParallel()
.Where(i => IsEven(i));
parallelResult.ForAll(e => Console.WriteLine(e));
}
catch (AggregateException e)
{
Console.WriteLine("There was {0} exceptions", e.InnerExceptions.Count());
}
Он вызывает функцию IsEven
private static bool IsEven(int i)
{
if (i % 10 == 0)
throw new AggregateException("i");
return i % 2 == 0;
}
Это генерирует исключение AggregateException.
Я бы ожидал, что код будет записывать каждое четное число в диапазоне 0,20 и "Было 1 исключение" дважды.
То, что я получаю, - это напечатанные некоторые цифры (они являются случайной причиной ForAll), а затем исключение генерируется, но не вылавливается и программы останавливаются.
Мне что-то не хватает?