1

我知道我可以處理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一個處理程序?並且所有未觀察到的任務異常將由此處理?

或者我需要每個程序集/每個類的處理程序,並且只有該程序集/類中任務的未觀察到的異常將轉到該處理程序?

回答

2

每個應用程序域都是。這是一個關閉Task類的靜態事件,您應該確保在邏輯應用程序啓動時掛鉤。因此,對於控制檯應用程序,只需在開始任何其他工作之前將其掛接在Main中。對於ASP.NET應用程序,只需將其掛接到Global.asax Application_Start即可。對於Windows服務,請在OnStart中。

+0

這是我的想法,感謝您的答覆。 – Lyall 2012-02-25 15:03:17

+0

@Drew Marsh嗨,我做到了,但沒有解決在這裏:http://stackoverflow.com/questions/11831844/unobservedtaskexception-being-throw-but-it-is-handled-by-a-taskscheduler-unobser – newway 2012-08-07 19:19:58