处理未观察到的任务异常

时间:2012-02-24 16:23:38

标签: c#-4.0 exception-handling task-parallel-library unobserved-exception

我知道我可以处理UnobservedTaskException以防止任何未观察到的异常在终结器在对象上运行时终止我的应用程序。

但是,我不知道应该在何时何地为此事件设置处理程序。 TaskScheduler类中事件本身的XML文档说:

/// This AppDomain-wide event provides a mechanism to prevent exception
/// escalation policy (which, by default, terminates the process) from triggering.
/// Each handler is passed a <see cref="T:System.Threading.Tasks.UnobservedTaskExceptionEventArgs"/> 
/// instance, which may be used to examine the exception and to mark it as observed.

这是否意味着我在整个AppDomain中只需要一个处理程序?并且所有未观察到的任务异常都将由此处理?

或者我是否需要每个程序集/每个类的处理程序,并且只有该程序集/类中任务的未观察到的异常将转到该处理程序?

1 个答案:

答案 0 :(得分:2)

每个app-domain都是。它是Task类之外的静态事件,您应该确保在逻辑应用程序启动时挂钩。因此,对于控制台应用程序,只需在开始任何其他工作之前将其挂钩在Main中。对于ASP.NET应用程序,只需将其挂钩到Global.asax Application_Start即可。对于Windows服务,请在OnStart中。