1

Je sais que je peux gérer le UnobservedTaskException pour empêcher toute exception non observée de terminer mon application lorsque le finaliseur s'exécute sur l'objet.Gestion des exceptions de tâches non observées

Cependant, je ne sais pas où et quand je devrais configurer le gestionnaire pour cet événement. Le doc XML sur l'événement lui-même dans la classe TaskScheduler dit:

/// 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. 

Est-ce que cela signifie que je besoin d'un seul gestionnaire dans l'ensemble AppDomain? Et que toutes les exceptions de tâches non observées seront traitées par cela?

Ou ai-je besoin d'un gestionnaire par assembly/par classe, et seules les exceptions non observées des tâches au sein de cette assembly/classe iront à ce gestionnaire?

Répondre

2

Par app-domain est tout. Il s'agit d'un événement statique hors de la classe Task que vous devez vous assurer de connecter au moment du démarrage de l'application logique. Donc, pour une application de console, il suffit de l'accrocher dans Main avant de commencer tout autre travail. Pour les applications ASP.NET, connectez-vous simplement dans Global.asax Application_Start. Pour un service Windows, dans OnStart.

+0

C'est ce que je pensais, merci pour la réponse. – Lyall

+0

@Drew Marsh Salut, je l'ai fait mais ne pas résolu ici: http://stackoverflow.com/questions/11831844/unobservedtaskexception-being-throw-but-it-is-handled-by-a-taskscheduler-unobser – newway