Gestion des exceptions de tâches non observées
Question
Je sais que je peux gérer le UnobservedTaskException
pour empêcher toute exception inobservée de mettre fin à mon application lorsque le finaliseur s'exécute sur l'objet.
Cependant, je ne sais pas où ni quand configurer le gestionnaire pour cet événement.Le document XML sur l'événement lui-même dans le TaskScheduler
la classe 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.
Cela signifie-t-il que je n'ai besoin que d'un seul gestionnaire dans l'ensemble du domaine d'application ?Et que toutes les exceptions de tâches non observées seront géré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 cet assembly/classe seront attribuées à ce gestionnaire ?
La solution
Par domaine d'application, c'est tout.C'est un événement statique hors du Task
classe que vous devez simplement vous assurer de connecter au moment du démarrage logique de l'application.Donc, pour une application console, connectez-la simplement à Main avant de commencer tout autre travail.Pour les applications ASP.NET, connectez-le simplement à Global.asax Application_Start.Pour un service Windows, dans OnStart.