Gestione delle eccezioni di attività non osservate
Domanda
So che posso gestire il UnobservedTaskException
Per evitare che eventuali eccezioni non osservate terminano la mia applicazione quando il Finalizzatore viene eseguito sull'oggetto.
Tuttavia, non sono sicuro di dove o quando dovrei impostare il gestore per questo evento. Il documento XML sull'evento stesso all'interno del TaskScheduler
Classe dice:
/// 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.
Questo significa che ho bisogno di un solo gestore nell'intero appdomain? E che tutte le eccezioni di attività non osservate saranno gestite da questo?
O ho bisogno di un gestore per assemblaggio / per classe e solo eccezioni non osservate dalle attività all'interno di quell'assemblaggio / classe andranno a quel gestore?
Soluzione
Per dominio di app è tutto. È un evento statico al largo del Task
Classe che dovresti solo assicurarti di agganciarsi al tempo di avvio logico dell'applicazione. Quindi per un'app per console, basta agganciarlo in main prima di iniziare qualsiasi altro lavoro. Per le app ASP.NET, basta agganciarlo in Global.asax Application_Start. Per un servizio Windows, in Onstart.