16 Stimmen

c# finalizer wirft Ausnahme?

Zitat von MSDN:

Wenn Finalize oder eine Überschreibung von Finalize eine Ausnahme auslöst, ignoriert die Laufzeitumgebung die Ausnahme, bricht die Finalize-Methode ab und setzt den Finalisierungsprozess fort.

Doch wenn ich es habe:

~Person()
{
throw new Exception("meh");
}

dann führt dies zu einer Laufzeitausnahme?

p.s. Ich weiß, dass dies nie passieren sollte, aber ich bin einfach neugierig auf dieses Verhalten. Einer unserer Kunden hatte einen leeren Try-Catch um alle seine Finalizer es wurde nicht einmal protokolliert, wenn etwas schief ging oder das Objekt wiederhergestellt :/

26voto

Hans Passant Punkte 894572

Es ist wichtig, dass Sie die Quelle Ihres Zitats angeben. Ich muss annehmen, dass es sich um eine alte Version von .NET handelt, vielleicht Version 1.x. Sie versuchte, "tolerant" gegenüber unbehandelten Ausnahmen zu sein und sie ohne Murren zu schlucken. Das hat nicht gut funktioniert, denn Code, der stillschweigend fehlschlägt, ist außerordentlich schwer zu debuggen.

Die .NET 2.0 Version hat dem ein Ende gesetzt, der Standard-CLR-Host beendet die Anwendung bei jeder unbehandelten Ausnahme. Eine Ausnahme in einem Finalizer ist fatal.

0voto

Pellet Punkte 2056

Ich bin neugierig, was in Xamarin passiert, da ich dies in der Produktion gesehen habe und die Android-App nicht abstürzt, ist es möglich, dass eine Sperre auf dem Finalizer-Thread aufgetreten ist und die App bis zum Neustart unterdurchschnittlich lief.

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