gpt4 book ai didi

c# - 捕获后继续尝试 block 。在一个 try catch 中记录所有异常

转载 作者:行者123 更新时间:2023-12-02 16:29:39 26 4
gpt4 key购买 nike

我想做 4 个 Action ,每个 Action 都可以抛出异常。我需要全部执行它们并记录沿途发生的所有错误

我可以用大而笨拙的方式来做:

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 block 并继续执行的信息,但没有成功。是否可以。有没有其他方法可以解决我没有考虑到的问题?

最佳答案

我想(考虑到您的重新装备)一种方法是创建一个本地方法

var exceptions = new List<Exception>();

async Task<T> DoAsync<T>(Func<Task<T>> func)
{
try
{
return await func();
}
catch (Exception ex)
{
exceptions.Add(ex);
logger.Log(ex);
}

return default;
}

result1 = await DoAsync(action1);
result2 = await DoAsync(action2);

if (exceptions.Count > 0)
{
return false;
}

关于c# - 捕获后继续尝试 block 。在一个 try catch 中记录所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63761376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com