15

MSDN からの引用:

Finalize または Finalize のオーバーライドが例外をスローした場合、ランタイムは例外を無視し、その Finalize メソッドを終了して、ファイナライズ プロセスを続行します。

それでも私が持っている場合:

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

その後、実行時例外が発生しますか?

psこれが決して起こらないことはわかっていますが、この動作に興味があります。私たちのクライアントの1つは、すべてのファイナライザーの周りに空のtry catchがありました..問題が発生したとき、またはオブジェクトを再選択したときにログに記録しませんでした:/

4

2 に答える 2

25

引用元をリンクすることは重要です。.NET の古いバージョン、おそらくバージョン 1.x について話していると想定しなければなりません。未処理の例外に対して「寛容」になろうとし、きしむことなくそれらを飲み込みました。それはうまくいきませんでした。静かに失敗するコードのチャンクは、デバッグが非常に困難です。

.NET 2.0 バージョンではこれに終止符が打たれ、既定の CLR ホストは未処理の例外が発生した場合にアプリを終了します。ファイナライザでの例外は致命的です。

于 2010-04-22T15:21:26.573 に答える