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 języka wspólnego zapewnia backstop dla niektórych nieobsługiwane wyjątki, które są używane do kontrolowania przepływu programu:

  • Element ThreadAbortException jest zgłaszany 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 wprowadziły środowisko uruchomieniowe z niezarządzanego kodu, są one kontynuowane normalnie, co powoduje zakończenie aplikacji.

Uwaga

Ś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 w trybie dyskretnym, bez przerywania aplikacji poważne problemy programistyczne mogą nie być wykrywane. 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 na nieobsługiwane wyjątki w wątkach w naturalny sposób, dopóki system operacyjny nie zakończy programu, naraża takie problemy podczas programowania i testowania. Raporty o błędach dotyczące kończenia programu obsługują debugowanie.

Przesłonięcia 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 też