我想拋出並捕獲一個AggregateException。 我沒有在C#上使用異常,但我發現的行爲有點令人驚訝。捕獲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的隨機原因),然後拋出異常,但沒有捕獲並且程序停止。
我錯過了什麼?
我不知道爲什麼會這樣,嘗試改變'拋出新AggregateException( 「I」);'到'拋出新的ArgumentException( 「I」);'產生預期的結果 –
投擲'拋出新AggregateException( 「我」 ,new [] {new ArgumentException(「i」)});'也有幫助,但不知道爲什麼你的版本崩潰了應用程序 –
你通過拋出錯誤的異常混淆了系統。相反,拋出一個參數或InvalidOperationException。 –