Ausnahmen in verwalteten Threads

Die Common Language Runtime lässt bei den meisten Ausnahmefehlern in Threads deren ordnungsgemäße Fortsetzung zu. Das für i. d. R. dazu, dass die Anwendung durch die unbehandelte Ausnahme beendet wird. Die Common Language Runtime stellt jedoch für bestimmte unbehandelte Ausnahmen, die zum Steuern des Programmablaufs verwendet werden, ein Sicherheitsnetz bereit:

  • In einem Thread wird eine ThreadAbortException ausgelöst, da Abort aufgerufen wurde. Dies betrifft nur .NET Framework-Apps.

  • In einem Thread wird eine AppDomainUnloadedException ausgelöst, da die Anwendungsdomäne, in der der Thread ausgeführt wird, entladen wird.

  • Die Common Language Runtime oder ein Hostprozess beendet den Thread durch Auslösen einer internen Ausnahme.

Wenn eine dieser Ausnahmen in Threads, die von der Common Language Runtime erstellt wurden, nicht behandelt werden, beendet die Ausnahme den Thread, die Common Language Runtime lässt jedoch die Weiterreichung der Ausnahme nicht zu.

Wenn diese Ausnahmen im Hauptthread oder in Threads, die von nicht verwaltetem Code in die Laufzeit eintreten, nicht behandelt werden, werden sie normal fortgesetzt, d. h., sie beenden die Anwendung.

Hinweis

Die Laufzeit kann eine unbehandelte Ausnahme auslösen, bevor verwalteter Code einen Ausnahmehandler installieren kann. Auch wenn verwalteter Code eine derartige Ausnahme nicht behandeln könnte, kann die Ausnahme normal fortgesetzt werden.

Aufdecken von Threadingproblemen bei der Entwicklung

Wenn Threads unerkannt fehlschlagen können, ohne die Anwendung zu beenden, können Sie gravierende Programmierfehler übersehen. Dies ist insbesondere bei Diensten und anderen Anwendungen ein Problem, die über einen längeren Zeitraum ausgeführt werden. Durch das Fehlschlagen von Threads wird der Programmzustand allmählich beschädigt. Dadurch kann sich die Anwendungsleistung verschlechtern, und es kann passieren, dass die Anwendung nicht mehr reagiert.

Wenn Sie die normale Fortsetzung von unbehandelten Ausnahmen in Threads zulassen, bis das Programm vom Betriebssystem beendet wird, werden derartige Probleme bei der Entwicklung und beim Testen entdeckt. Fehlerberichte über Beendigungen des Programms unterstützen das Debuggen.

Hostüberschreibung

Ein nicht verwalteter Host kann über die ICLRPolicyManager-Schnittstelle in der Hosting-API die Standardrichtlinie für Ausnahmefehler der Common Language Runtime überschreiben. Die ICLRPolicyManager::SetUnhandledExceptionPolicy-Funktion wird zum Festlegen der Richtlinie für unbehandelte Ausnahmen verwendet.

Siehe auch