編輯 - 每個答案重命名為終結器
我正在嘗試在終結器中做一些事情,并且程式在我完成之前終止。為了模擬,我做了以下測驗,最多列印 20
這是否意味著 .NET 終結器在 2 秒后“超時”?
~MyClass()
{
// do some cleaup
int i = 0;
while (true)
{
Console.WriteLine(i );
Thread.Sleep(100);
}
}
對于背景關系,我有一些我想優雅地終止的后臺執行緒(任務物件)。我只是在測驗看看從終結器完成它需要多長時間。
這樣做的更好的設計模式是什么?也許有一個“關閉”方法,我必須確保在關閉表單時呼叫它?我知道終結器是用來清理非托管記憶體的,但是停止我的所有執行緒似乎很好,因為我知道它會被呼叫。
也許我只是讓執行緒突然終止而不擔心它?
uj5u.com熱心網友回復:
首先,我應該注意到“解構式”現在更常被稱為“終結器”,因為前一個術語暗示這些特殊方法在 C 中像解構式一樣作業,但實際上并非如此。因此,如果您使用較新的術語,您的搜索可能會更好。
對于您的問題,是的,有證據表明 .NET 在關閉期間對終結器有時間限制- 常見的參考說一個終結器需要超過 2 秒,或者所有終結器需要 40 秒 - 將導致運行時放棄并在沒有繼續讓終結器運行。
我建議考慮實施 IDisposable 以確定性地處理清理。C# 有語法糖 -using陳述句 - 以幫助在消費者方面更容易做到這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449544.html
上一篇:從分號分隔的字串中提取值
