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 つの例外がありました」を 2 回書き込むことを期待します。
私が得たのは、いくつかの数字が出力され(ForAllのランダムな原因です)、例外がスローされましたが、キャッチされず、プログラムが停止しました。
何か不足していますか?