2 Stimmen

Haupt-Thread fortsetzen, wenn Worker-Thread unbehandelt zurückkehrt

Ich verwende Reflection, um Objekte aus anderen Assemblies zu instanziieren. Die Objekte in diesen Assemblies können im Laufe ihres Prozesses andere Threads starten. Der Autor dieser Assembly kann Ausnahmen auf diesen Worker-Threads nicht korrekt behandeln. Das Problem ist, dass, wenn sie unbehandelt zurückkehren, die gesamte Anwendung aufhört, ausgeführt zu werden und AppDomain.CurrentDomain.UnhandledException ausgelöst wird.

Ich habe versucht, meinen Methodenaufrufer einfach in eine try...catch aber das scheint die Ausnahme nicht abzufangen (macht Sinn, da der nächste erzeugte Worker-Thread der eigentliche fehlerhafte Thread ist)

Gibt es eine Möglichkeit, mit dieser Situation umzugehen, ohne den Entwicklern einfach vorzuschreiben, alle Ausnahmen korrekt zu behandeln?

Die Idee wäre ähnlich wie bei den Windows-Diensten. Nur weil eine einzelne Anwendung ausfällt, bedeutet das nicht, dass der Windows Service Host ebenfalls abstürzen muss.

Was übersehe ich hier?

1voto

Reed Copsey Punkte 536986

Sie sollten wirklich nur dafür sorgen, dass Ausnahmen in den Threads korrekt behandelt werden, und wenn dies nicht der Fall ist, Ihre Anwendung sauber herunterfahren.

Um zu verhindern, dass die AppDomain heruntergefahren wird, müssten Sie diese "Komponenten" innerhalb ihrer eigenen privaten AppDomain laden. Dies würde dazu führen, dass sie ihre AppDomain abreißen, aber nicht die gesamte Anwendung.

Dies hat andere Konsequenzen (insbesondere bei der Übergabe von Daten in und aus den Objekten) und kann das Design Ihrer Anwendung dramatisch verkomplizieren, weshalb ich es nicht auf die leichte Schulter nehmen würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X