Sdílet prostřednictvím


Výjimky ve spravovaných vláknech

Modul CLR (Common Language Runtime) umožňuje přirozeně pokračovat většinu neošetřených výjimek ve vláknech. Ve většině případů to znamená, že neošetřená výjimka způsobí ukončení aplikace. Modul CLR (Common Language Runtime) ale poskytuje backstop pro určité neošetřené výjimky, které se používají k řízení toku programu:

  • A ThreadAbortException je vyvolán ve vlákně, protože Abort byl volán. To platí jenom pro aplikace rozhraní .NET Framework.

  • Je AppDomainUnloadedException vyvolána ve vlákně, protože doména aplikace, ve které se vlákno spouští, je uvolněna.

  • Modul CLR (Common Language Runtime) nebo hostitelský proces ukončí vlákno vyvoláním interní výjimky.

Pokud jsou některé z těchto výjimek neošetřené ve vláknech vytvořených modulem CLR (Common Language Runtime), výjimka ukončí vlákno, ale modul CLR (Common Language Runtime) nepovolí, aby výjimka pokračovala dál.

Pokud jsou tyto výjimky neošetřené v hlavním vlákně nebo ve vláknech, která zadala modul runtime z nespravovaného kódu, pokračují normálně, což vede k ukončení aplikace.

Poznámka:

Modul runtime může vyvolat neošetřenou výjimku předtím, než má jakýkoli spravovaný kód možnost nainstalovat obslužnou rutinu výjimky. I když spravovaný kód neměl možnost takovou výjimku zpracovat, může výjimka pokračovat přirozeně.

Zveřejnění problémů s vlákny během vývoje

Pokud jsou vlákna povolena bezobslužné selhání bez ukončení aplikace, vážné programovací problémy mohou být nezjištěny. Jedná se o konkrétní problém pro služby a další aplikace, které běží po delší dobu. Když vlákna selžou, stav programu se postupně poškodí. Výkon aplikace může snížit nebo aplikace může přestat reagovat.

Povolení neošetřených výjimek ve vláknech pokračovat přirozeně, dokud operační systém program neukončí, zveřejní tyto problémy během vývoje a testování. Chybové zprávy o ukončení programu podporují ladění.

Přepsání hostitele

Nespravovaný hostitel může pomocí rozhraní ICLRPolicyManager v rozhraní API hostingu přepsat výchozí neošetřené zásady výjimek modulu CLR ( Common Language Runtime). Funkce ICLRPolicyManager::SetUnhandledExceptionPolicy slouží k nastavení zásad pro neošetřené výjimky.

Viz také