我正在尝试抛出并捕获 AggregateException。我在 C# 上并没有非常多地使用异常,但我发现的行为有点令人惊讶。
我的代码是:
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 的随机原因),然后抛出异常,但没有被捕获并且程序停止。
我错过了什么吗?