Delen via


Uitzonderingen in beheerde threads

Met de algemene taalruntime kunnen de meeste niet-verwerkte uitzonderingen in threads op natuurlijke wijze worden voortgezet. In de meeste gevallen betekent dit dat de niet-verwerkte uitzondering ervoor zorgt dat de toepassing wordt beëindigd. De algemene taalruntime biedt echter een backstop voor bepaalde niet-verwerkte uitzonderingen die worden gebruikt voor het beheren van de programmastroom:

  • Een ThreadAbortException wordt in een thread gegooid omdat Abort deze is aangeroepen. Dit geldt alleen voor .NET Framework-apps.

  • Er AppDomainUnloadedException wordt een thread gegenereerd omdat het toepassingsdomein waarin de thread wordt uitgevoerd, wordt verwijderd.

  • De algemene taalruntime of een hostproces beëindigt de thread door een interne uitzondering te genereren.

Als een van deze uitzonderingen niet wordt verwerkt in threads die zijn gemaakt door de Common Language Runtime, wordt de thread beëindigd door de uitzondering, maar de algemene taalruntime staat de uitzondering niet toe om verder te gaan.

Als deze uitzonderingen niet worden verwerkt in de hoofdthread of in threads die de runtime van niet-beheerde code hebben ingevoerd, gaan ze normaal verder, wat resulteert in beëindiging van de toepassing.

Notitie

Het is mogelijk dat de runtime een niet-verwerkte uitzondering genereert voordat een beheerde code een uitzonderingshandler kan installeren. Hoewel beheerde code geen kans had om een dergelijke uitzondering af te handelen, mag de uitzondering op natuurlijke wijze doorgaan.

Threadingproblemen beschikbaar maken tijdens de ontwikkeling

Wanneer threads op de achtergrond mogen mislukken zonder de toepassing te beëindigen, kunnen ernstige programmeerproblemen onopgemerkt blijven. Dit is een bepaald probleem voor services en andere toepassingen die gedurende langere perioden worden uitgevoerd. Naarmate threads mislukken, raakt de programmastatus geleidelijk beschadigd. De prestaties van toepassingen kunnen afnemen of de toepassing reageert mogelijk niet meer.

Het toestaan van niet-verwerkte uitzonderingen in threads om op natuurlijke wijze door te gaan, totdat het besturingssysteem het programma beëindigt, worden dergelijke problemen weergegeven tijdens het ontwikkelen en testen. Foutrapporten over programma-beëindigingen bieden ondersteuning voor foutopsporing.

Overschrijven van host

Een niet-beheerde host kan de ICLRPolicyManager-interface in de Hosting-API gebruiken om het standaard niet-verwerkte uitzonderingsbeleid van de common language runtime te overschrijven. De functie ICLRPolicyManager::SetUnhandledExceptionPolicy wordt gebruikt om het beleid in te stellen voor niet-verwerkte uitzonderingen.

Zie ook