Sdílet prostřednictvím


Výjimky ve spravovaných vláknech

Společné běhové prostředí umožňuje většině neošetřených výjimek ve vláknech přirozeně pokračovat. 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 vyhozen ve vlákně, protože Abort byl spuštěn. To platí jenom pro aplikace rozhraní .NET Framework.

  • Ve vlákně je vyvolána AppDomainUnloadedException, protože doména aplikace, ve které se toto vlákno spouští, je uvolňová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ě.

Odhalení problémů s vlákny během vývoje

Pokud jsou vlákna povolena selhávat bez povšimnutí a bez ukončení aplikace, vážné programovací problémy mohou zůstat neodhalené. 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 se může snížit, nebo aplikace může přestat reagovat.

Povolení, aby neošetřené výjimky ve vláknech probíhaly přirozeně, dokud operační systém program neukončí, odhaluje tyto problémy během vývoje a testování. Chybové zprávy o ukončení provozu programu podporují odstraňování chyb.

Přepsání hostitele

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

Viz také