Eccezioni nei thread gestiti

Common Language Runtime consente alla maggior parte delle eccezioni non gestite nei thread di proseguire normalmente. Nella maggior parte dei casi questo significa che l'eccezione non gestita provoca l'interruzione dell'applicazione. Tuttavia, Common Language Runtime fornisce una barriera per determinate eccezioni non gestite usate per controllare il flusso del programma:

  • Viene generata un'eccezione ThreadAbortException in un thread perché è stato chiamato il metodo Abort. Questo vale solo per le app .NET Framework.

  • Viene generata un'eccezione AppDomainUnloadedException in un thread perché è in corso lo scaricamento del dominio dell'applicazione in cui è in esecuzione il thread.

  • Common Language Runtime o un processo host termina il thread generando un'eccezione interna.

Se una qualsiasi di queste eccezioni viene gestita nei thread creati da Common Language Runtime, l'eccezione termina il thread, ma Common Language Runtime non consente all'eccezione di proseguire.

Se queste eccezioni vengono gestite nel thread principale o in thread immessi nel runtime dal codice non gestito, esse proseguono normalmente con una conseguente chiusura dell'applicazione.

Nota

È possibile che il runtime generi un'eccezione non gestita prima che qualsiasi codice gestito abbia avuto la possibilità di installare un gestore di eccezioni. Anche se il codice gestito non può gestire tale eccezione, all'eccezione è consentito proseguire normalmente.

Esposizione di problemi di threading durante lo sviluppo

Quando nei thread si verifica un errore in modo silenzioso ma l'applicazione non viene terminata, è possibile che vengano rilevati gravi problemi di programmazione. Si tratta di un problema specifico dei servizi e delle altre applicazioni eseguite per periodi prolungati. In caso di errore dei thread, il programma viene gradualmente danneggiato. L'errore può influire negativamente sulle prestazioni dell'applicazione o l'applicazione potrebbe bloccarsi.

Consentire alle eccezioni non gestite nei thread di proseguire normalmente finché il sistema operativo non termina il programma permette di esporre tali problemi durante le fasi di sviluppo e test. I report di errore relativi alle chiusure dei programmi supportano il debug.

Override dell'host

Un host non gestito può sfruttare l'interfaccia ICLRPolicyManager nell'API di hosting per eseguire l'override del criterio predefinito dell'eccezione non gestita di Common Language Runtime. La funzione ICLRPolicyManager:: SetUnhandledExceptionPolicy viene usata per impostare il criterio per le eccezioni non gestite.

Vedi anche