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