【发布时间】:2020-12-24 22:03:45
【问题描述】:
我想做 4 个动作,每个动作都可以抛出一个异常。我需要全部执行并记录沿途发生的所有错误
我可以大而笨拙地做到这一点:
var exceptions = new List<ExceptionType1>();
try {
result1 = await action1();
} catch (ExceptionType1 ex1) {
exceptions.Add(ex1);
logger.Log(ex1);
}
try {
result2 = await action2();
} catch (ExceptionType1 ex1) {
exceptions.Add(ex1);
logger.Log(ex1);
}
try {
result3 = await action3(result1);
} catch (ExceptionType2 ex2) {
var ex1 = new ExceptionType1(ex2);
exceptions.Add(ex1);
logger.Log(ex1);
}
try {
result4 = await action4(result2);
} catch (ExceptionType2 ex2) {
var ex1 = new ExceptionType1(ex2);
exceptions.Add(ex1);
logger.Log(ex1);
}
if (exceptions.Count > 0) {
return false;
}
显然,有时像这样的东西会迅速膨胀 我想以更优雅的方式做到这一点:
var exceptions = new List<ExceptionType1>();
try {
result1 = await action1();
result2 = await action2();
result3 = await action3(result1);
result4 = await action4(result2);
} catch(Exception ex) {
var ex1 = new ExceptionType1(ex);
exceptions.Add(ex1);
logger.Log(ex1);
???
~~Goto try block and continue executing~~
???
}
if (exceptions.Count > 0) {
return false;
}
我试图找到有关如何返回 try 块并继续执行的信息,但未成功。可能吗。有没有其他我没有考虑过的解决方法?
【问题讨论】:
-
为什么你首先会有像
result1、result2、result3这样的变量。它们似乎可以放入数组/列表中,然后您可以使用循环。 -
@Sweeper 我从各种来源获取数据并希望将它们组合到一个对象中。我看不出如何在这里使用循环。
-
那么不同的结果都是不同的类型?
-
那种。实际上,我将 action1 的结果用于 action3。以及 action2 的 action4 的结果。动作 1,2 和 3,4 是同一类型。我认为这些细节对于这个主题来说是不必要的。
标签: c# exception logging try-catch