【发布时间】:2021-10-22 13:42:31
【问题描述】:
我想知道这段代码是否会以在 10 次重试后调用 CleanUp() 的方式工作?还是 throw new Exception() 不会被最后一个 catch 块捕获?
public void Process()
{
try
{}
catch (MyException e)
{
int retries = GetRetries();
if(retries > 10)
{
_logger.LogError("Retried event already {retries} times. Giving up.", retries);
throw new Exception("Giving up!");
}
Process();
}
catch (Exception e)
{
CleanUp();
}
}
【问题讨论】:
-
如果您想知道运行代码时会发生什么,那么运行代码 看看会发生什么。你为什么要问我们你的代码在运行时做了什么?
-
不要对正常的控制流使用异常
-
因为代码比这复杂得多,要创建实际条件需要一些努力。因此,我试图尽可能简化这一点。希望一般问题很清楚。
-
@silent 我认为你不需要复杂的代码来测试这个 - try it out
-
如果你想重试
Process,那么你需要有一个循环,其中包含一个围绕Process的尝试,一旦你达到重试阈值就会抛出一个catch。然后,您可以尝试使用CleanuUp来解决所有这些问题(或者如果更有意义,可以使用 finally)。一个空的try是没有意义的,除非你只是为了简洁而没有在你的try中显示代码。