Udostępnij za pośrednictwem


Wyjątki w zarządzanych wątkach

Środowisko uruchomieniowe języka wspólnego umożliwia naturalnie wykonywanie większości nieobsługiwalnych wyjątków w wątkach. W większości przypadków oznacza to, że nieobsługiwany wyjątek powoduje zakończenie działania aplikacji. Jednak środowisko uruchomieniowe wspólnego języka zapewnia zabezpieczenie dla niektórych nieobsługiwanych wyjątków, które są używane do kontrolowania przepływu sterowania programem.

  • Element ThreadAbortException zostaje rzucony w wątku, ponieważ Abort został wywołany. Dotyczy to tylko aplikacji .NET Framework.

  • Element AppDomainUnloadedException jest zgłaszany w wątku, ponieważ domena aplikacji, w której jest wykonywany wątek, jest zwalniana.

  • Środowisko uruchomieniowe języka wspólnego lub proces hosta przerywa wątek, zgłaszając wyjątek wewnętrzny.

Jeśli którykolwiek z tych wyjątków nie jest obsługiwane w wątkach utworzonych przez środowisko uruchomieniowe języka wspólnego, wyjątek kończy wątek, ale środowisko uruchomieniowe języka wspólnego nie zezwala na dalsze działanie wyjątku.

Jeśli te wyjątki nie są obsługiwane w wątku głównym lub w wątkach, które weszły w środowisko uruchomieniowe z niezarządzanego kodu, proces przebiega normalnie, co prowadzi do zakończenia aplikacji.

Uwaga / Notatka

Środowisko uruchomieniowe może zgłosić nieobsługiwany wyjątek, zanim jakikolwiek kod zarządzany miał szansę zainstalować program obsługi wyjątków. Mimo że kod zarządzany nie miał szans na obsługę takiego wyjątku, wyjątek może być kontynuowany naturalnie.

Uwidacznianie problemów wątkowych podczas programowania

Jeśli wątki mogą zakończyć się niepowodzeniem niezauważalnie, bez zatrzymywania aplikacji, poważne problemy programistyczne mogą pozostać niewykryte. Jest to szczególny problem dla usług i innych aplikacji, które działają przez dłuższy czas. W miarę niepowodzenia wątków stan programu stopniowo staje się uszkodzony. Wydajność aplikacji może ulec pogorszeniu lub aplikacja może nie odpowiadać.

Zezwalanie, aby nieobsługiwane wyjątki w wątkach przebiegały naturalnie, dopóki system operacyjny nie zakończy programu, ujawnia takie problemy podczas programowania i testowania. Raporty błędów przy zakończeniu programu wspierają proces debugowania.

Nadpisywanie hosta

Host niezarządzany może użyć interfejsu ICLRPolicyManager w interfejsie API hostingu, aby zastąpić domyślne nieobsługiwane zasady wyjątków środowiska uruchomieniowego języka wspólnego. Funkcja ICLRPolicyManager::SetUnhandledExceptionPolicy służy do ustawiania zasad dla nieobsługiwane wyjątki.

Zobacz także