從一個方法聚合異常多個異常

誰說你不能在一種方法中丟擲多個例外。如果你不習慣使用 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);
        }
    }