首页 > 解决方案 > 如何捕获重新抛出的异常?

问题描述

我有以下代码:

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。我在这里想念什么?

标签: c#.neterror-handling

解决方案


但是,这不会捕获重新抛出的异常并将其记录到 Slack。我在这里想念什么?

当我们显式抛出异常时,可以通过将方法调用包含在 try catch 块中,在调用者端捕获它。我们不能在同一方法中从 catch 块中抛出和捕获异常,除非我们添加另一个在这里实际上没有意义的 try catch。

您应该做的是直接抛出该异常,例如:

try
 {
     await _policyService.QueuePayment();
            
 }
 catch (Exception ex)
 {
      if(ex is SecurityException)
      {
          // for security exception do something different
      }
      else
      {
          var slackError = new ErrorNotificationMessage("{ex.Message}");

          await Notify(slackError);
      }

      
 }

推荐阅读