【问题标题】:Global try catch handler for all the web api async await methods所有 web api async await 方法的全局 try catch 处理程序
【发布时间】:2019-04-28 23:46:55
【问题描述】:

我知道 await 运算符是干净的,如果一直与 async/await 一起使用,它将正确抛出异常。

我在控制器中编写了大量 API 调用(Web API),这些调用一直使用异步等待。有什么方法可以为所有这些异步等待方法编写一个通用的 try catch,还是我需要采用更难的方法在每个 API 方法中添加 try catch 以处理所有未处理的异常。

【问题讨论】:

  • 为什么需要“全局 try catch 处理程序”? What problem do you think that's going to solve?
  • 我需要一个通用的try catch,就像Global.asax的ApplicationOnError方法一样,这样可以编写一个通用的逻辑。

标签: c# async-await .net-4.6.1


【解决方案1】:

你可以写exception filter

请注意,无论方法是否为async,都会应用异常过滤器。相同的异常过滤器适用于引发异常的同步和异步方法。

【讨论】:

  • 谢谢。我知道你会来拯救世界免于陷入异步等待问题:)
  • 我遇到了两天前发布的另一个问题stackoverflow.com/questions/55836889/… 因为我没有得到任何指示,所以我计划在我的 ASP.NET 中完全删除 Task.Run 和 Thread.Startnew项目。我觉得这可能是导致该问题的原因。
  • 我浏览了你的这篇文章stackoverflow.com/questions/33764366/…得到了这个“这就是为什么ASP.NET的原则之一是避免使用线程池线程(除了ASP.NET给你的请求线程) ,当然)。更重要的是,这意味着 ASP.NET 应用程序应该避免使用 Task.Run。这让我决定从整个 ASP.NET 应用程序中删除 Task.Run 和 Thread.StartNew。
  • 如果我在一个异步方法中有多个等待,这个过滤器会起作用吗?如果第一个 await 方法在第二个 await Task 运行时抛出异常怎么办?第二个 await Task 异常会在哪里处理?
  • @Raghav:过滤器适用于由操作方法传播的任何异常。为了传播异常,所有任务必须(最终)由操作方法awaited。
猜你喜欢
  • 2019-03-14
  • 2017-11-23
  • 1970-01-01
  • 2018-06-21
  • 2018-07-05
  • 2019-07-03
相关资源
最近更新 更多