Dela via


Undantag i hanterade trådar

Med den vanliga språkkörningen kan de flesta ohanterade undantag i trådar fortsätta naturligt. I de flesta fall innebär det att det ohanterade undantaget gör att programmet avslutas. Den vanliga språkkörningen tillhandahåller dock en backstop för vissa ohanterade undantag som används för att styra programflödet:

  • En ThreadAbortException utlöses i en tråd eftersom Abort den anropades. Detta gäller endast för .NET Framework-appar.

  • En AppDomainUnloadedException genereras i en tråd eftersom programdomänen där tråden körs tas bort.

  • Den vanliga språkkörningen eller en värdprocess avslutar tråden genom att utlösa ett internt undantag.

Om något av dessa undantag är ohanterade i trådar som skapats av den vanliga språkkörningen avslutar undantaget tråden, men den vanliga språkkörningen tillåter inte att undantaget fortsätter.

Om dessa undantag är ohanterade i huvudtråden, eller i trådar som har angett körningen från ohanterad kod, fortsätter de normalt, vilket resulterar i att programmet avslutas.

Kommentar

Det är möjligt för körningen att utlösa ett ohanterat undantag innan någon hanterad kod har haft möjlighet att installera en undantagshanterare. Även om hanterad kod inte hade någon chans att hantera ett sådant undantag, tillåts undantaget att fortsätta naturligt.

Exponera trådproblem under utveckling

När trådar tillåts att misslyckas tyst, utan att avsluta programmet, kan allvarliga programmeringsproblem gå oidentifierade. Detta är ett särskilt problem för tjänster och andra program som körs under längre perioder. När trådar misslyckas blir programtillståndet gradvis skadat. Programmets prestanda kan försämras eller så kan programmet inte svara.

Att tillåta ohanterade undantag i trådar att fortsätta naturligt, tills operativsystemet avslutar programmet, exponerar sådana problem under utveckling och testning. Felrapporter om programavslut stöder felsökning.

Åsidosättning av värd

En ohanterad värd kan använda ICLRPolicyManager-gränssnittet i värd-API:et för att åsidosätta standardprincipen för ohanterade undantag för den vanliga språkkörningen. Funktionen ICLRPolicyManager::SetUnhandledExceptionPolicy används för att ange principen för ohanterade undantag.

Se även