いくつかの静的ファイナライズを実行する正しい方法は何ですか?
静的デストラクタはありません。イベントはAppDomain.DomainUnload
デフォルト ドメインでは発生しません。イベントは、すべてのAppDomain.ProcessExit
イベント ハンドラー間で合計 3 秒 (既定の設定) の時間を共有するため、実際には使用できません。
いくつかの静的ファイナライズを実行する正しい方法は何ですか?
静的デストラクタはありません。イベントはAppDomain.DomainUnload
デフォルト ドメインでは発生しません。イベントは、すべてのAppDomain.ProcessExit
イベント ハンドラー間で合計 3 秒 (既定の設定) の時間を共有するため、実際には使用できません。
Herfried Wagner は、これを実装する方法を説明する優れた記事を書いています。残念ながら、ドイツ語 (および VB) で書かれています。それでも、コードは理解できるはずです。
私はそれを試しました:
static readonly Finalizer finalizer = new Finalizer();
sealed class Finalizer {
~Finalizer() {
Thread.Sleep(1000);
Console.WriteLine("one");
Thread.Sleep(1000);
Console.WriteLine("two");
Thread.Sleep(1000);
Console.WriteLine("three");
Thread.Sleep(1000);
Console.WriteLine("four");
Thread.Sleep(1000);
Console.WriteLine("five");
}
}
イベントとまったく同じように機能するようAppDomain.ProcessExit
です。ファイナライザーは ca を取得します。三秒…
基本的に、できません。可能な限り最大限に回避するように設計してください。
いずれにせよ、プログラムはいつでも突然終了する可能性があることを忘れないでください。誰かが電源を抜いたことが明らかな例です。したがって、何をするにも「ベスト エフォート」でなければなりません。その場合、それで十分であることを願っています。AppDomain.ProcessExit
あなたの特定のケースでは、何をする必要がありますか?
頭に浮かぶ2つのソリューション:
リリースする必要がある静的メソッドに何をロードしているのか疑問に思います。これらのことを静的メソッドで行うことはお勧めしません。
つまり、静的メソッドは、ファイナライズ メソッドを持つオブジェクトをインスタンス化できます。