【发布时间】:2015-10-03 19:30:04
【问题描述】:
我在我的 MVC 应用程序中实现了一个自定义 HandleErrorAttribute,它以某种方式集中并捕获应用程序中发生的所有异常,效果很好。
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
....
}
}
问题是:我已经开始实现一些异步任务,比如这个:
Task.Factory.StartNew(() => DoSomethingAsync());
并意识到我的CustomHandleErrorAttribute 没有拦截这些方法中发生的异常:在这种情况下,如果DomeSomethingAsync() 方法内部发生异常,那么我的HandleErrorAttribute 不会捕获它; Global.asax 也不会。
对于集中异步任务中发生的异常有什么好的实现?我不想在每个方法中都实现一个简单的 try/catch 块:我想用某种捕获它们的处理程序来计数。
【问题讨论】:
-
像
await Task.Factory.StartNew(() => DoSomethingAsync());这样调用它会得到什么 -
@EZI 将异常冒泡到主线程。我不想要那个。我希望异步任务无论如何运行,主线程忽略异步任务的结果。
-
这有帮助吗? dotnetcodr.com/2014/02/18/…
-
即发即弃是不好的模式,但如果这是您正在寻找的几个现有副本。否则 i3arnon 的回答提供了很好的指导。请评论一下即发即弃是否是您正在寻找的。span>
-
@AlexeiLevenkov 我想要一种机制来实际捕获来自通用处理类中的即发即弃方法的所有异常。但你是对的:i3arnon 给出了一个很好的方法☺
标签: c# asp.net-mvc-4 asynchronous exception-handling task-parallel-library