You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#异常处理:重试10次后重抛的异常能否被最后一个catch块捕获?

结论

重试次数满10次后不会触发CleanUp()方法,你抛出的new Exception()不会被当前方法的最后一个catch块捕获。

原因说明

同一个try块对应的catch分支,只能捕获这个try花括号内部抛出的异常,你的异常是在catch (MyException e)的代码块里抛的,已经不在最外层try的覆盖范围内,所以当前方法的第二个catch根本接不到这个异常。

完整的执行流程是这样的:

  • 首次执行Process(),try块内抛出MyException,进入第一个catch分支
  • 重试次数≤10时,递归调用Process(),重复上面的逻辑
  • 当某次递归调用中GetRetries()返回值大于10时,会在当前这层递归的catch (MyException e)块里抛出Exception("Giving up!")
  • 这个异常不会被当前层的第二个catch捕获,而是会向上抛到上一层递归的Process()调用位置,最终会溢出到最上层调用方,全程不会走CleanUp()逻辑。

修复建议

如果要实现重试超10次后自动执行CleanUp(),可以调整逻辑:
要么直接在retries > 10的分支里调用CleanUp()再结束逻辑,要么给递归调用的Process()套一层try-catch捕获内部抛出的异常。


内容的提问来源于stack exchange,提问作者silent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:15:03