我试图抛出和捕获一个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 范围内写入每个偶数和两次 "There was 1 exceptions"。
实际上,我得到了一些数字的输出(由于 ForAll 的随机性质),然后抛出了异常,但是没有被捕获,程序停止了。
我错过了什么吗?
throw new AggregateException("i");
更改为throw new ArgumentException("i");
可以产生预期的结果。 - Sriram Sakthivel