從一個方法聚合異常多個異常
誰說你不能在一種方法中丟擲多個例外。如果你不習慣使用 AggregateExceptions,那麼你可能想要建立自己的資料結構來表示出現問題。當然,另一個不例外的資料結構會更加理想,例如驗證結果。即使你使用 AggregateExceptions 進行遊戲,你也可能處於接收方並始終處理它們而不會意識到它們對你有用。
有一個方法執行是非常合理的,即使它總體上是一個失敗,你會想要突出顯示丟擲的異常中出錯的多個事情。作為示例,可以看出這種行為是如何將 Parallel 方法工作的任務分解為多個執行緒,並且任何數量的任務都可以丟擲異常,這需要報告。以下是一個如何從中受益的愚蠢示例:
public void Run()
{
try
{
this.SillyMethod(1, 2);
}
catch (AggregateException ex)
{
Console.WriteLine(ex.Message);
foreach (Exception innerException in ex.InnerExceptions)
{
Console.WriteLine(innerException.Message);
}
}
}
private void SillyMethod(int input1, int input2)
{
var exceptions = new List<Exception>();
if (input1 == 1)
{
exceptions.Add(new ArgumentException("I do not like ones"));
}
if (input2 == 2)
{
exceptions.Add(new ArgumentException("I do not like twos"));
}
if (exceptions.Any())
{
throw new AggregateException("Funny stuff happended during execution", exceptions);
}
}