【发布时间】:2026-01-05 03:05:02
【问题描述】:
我有以下代码:
try
{
await _policyService.QueuePayment();
}
catch (Exception ex)
{
var slackError = new ErrorNotificationMessage("{ex.Message}");
await Notify(slackError);
}
如果异常是安全异常,我想提供更多详细信息并将其记录到 Slack,因此我将这个 try/catch 块扩展如下:
try
{
await _policyService.QueuePayment();
}
catch (SecurityException ex)
{
throw new Exception("detailed message", ex);
}
catch (Exception ex)
{
var slackError = new ErrorNotificationMessage("{ex.Message}");
await Notify(slackError);
}
但是,这不会捕获重新抛出的异常并将其记录到 Slack。我在这里错过了什么?
【问题讨论】:
-
"我在这里遗漏了什么?" --
catch语句捕获在相应的try块中抛出的异常。一个catch块中引发的异常不会被后续catch块捕获。 -
谢谢@canton7 - 所以我这里需要2个
trys? -
或者重构出
Notify逻辑——它目前只是在catch (Exception ex)块中,而您正在跳过箍以通过该块获取所有异常。把它移到一个单独的辅助方法中,然后catch (SecurityException ex) { await NotifyError(new Exception("detailed message", ex); } catch (Exception ex) { await NotifyError(ex); }
标签: c# .net error-handling