Freigeben über


Ausnahmen in verwalteten Threads

Die Common Language Runtime ermöglicht es den meisten unbehandelten Ausnahmen in Threads, natürlich fortzufahren. In den meisten Fällen bedeutet dies, dass die unbehandelte Ausnahme dazu führt, dass die Anwendung beendet wird. Die Common Language Runtime bietet jedoch einen Backstop für bestimmte unbehandelte Ausnahmen, die zum Steuern des Programmflusses verwendet werden:

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

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

  • Die Common Language Runtime oder ein Hostprozess beendet den Thread, indem eine interne Ausnahme ausgelöst wird.

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

Wenn diese Ausnahmen im Hauptthread oder in Threads, die aus nicht verwaltetem Code in die Laufzeitumgebung eingetreten sind, nicht behandelt werden, werden sie normal fortgesetzt, was zur Beendigung der Anwendung führt.

Hinweis

Es ist möglich, dass die Laufzeit eine unbehandelte Ausnahme auslöst, bevor ein verwalteter Code die Möglichkeit hatte, einen Ausnahmehandler zu installieren. Obwohl verwalteter Code keine Möglichkeit hatte, eine solche Ausnahme zu behandeln, darf die Ausnahme natürlich fortgesetzt werden.

Aufdecken von Threadingproblemen bei der Entwicklung

Wenn Threads im Hintergrund fehlschlagen dürfen, ohne die Anwendung zu beenden, können schwerwiegende Programmierprobleme nicht erkannt werden. Dies ist ein besonderes Problem für Dienste und andere Anwendungen, die für längere Zeiträume ausgeführt werden. Wenn Threads fehlschlagen, wird der Programmzustand allmählich korrumpiert. Die Anwendungsleistung kann beeinträchtigt werden, oder die Anwendung reagiert nicht mehr.

Das Zulassen, dass unbehandelte Ausnahmen in Threads unbeeinflusst laufen, bis das Betriebssystem das Programm beendet, legt solche Probleme während der Entwicklung und Tests offen. Fehlerberichte zu Programmbeendigungen unterstützen das Debuggen.

Hostüberschreibung

Ein nicht verwalteter Host kann die ICLRPolicyManager-Schnittstelle in der Hosting-API verwenden, um die standardmäßige nicht behandelte Ausnahmerichtlinie der Common Language Runtime außer Kraft zu setzen. Die Funktion ICLRPolicyManager::SetUnhandledExceptionPolicy wird verwendet, um die Richtlinie für unbehandelte Ausnahmen festzulegen.

Siehe auch