从一个方法聚合异常多个异常

谁说你不能在一种方法中抛出多个例外。如果你不习惯使用 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);
        }
    }