後終結不叫我的測試代碼:未處理的異常甚至CriticalFinalizerObject
public class A : CriticalFinalizerObject
{
~A()
{
File.WriteAllText("c:\\1.txt", "1z1z1");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
throw new Exception();
}
}
開始我嘗試運行它,而不從CriticalFinalizerObject推導。該程序結束後,終結器未被調用。 這讓我感到驚訝,因爲我認爲它更確定,但沒關係。然後我讀了關於確保他們的終結器將被調用的CriticalFinalizerObject。我從它得到A. 猜猜看是什麼。它仍然沒有被執行。 我在做什麼/理解錯誤?
(我知道,請不要寫關於垃圾收集是不確定性顯而易見的東西。作爲節目結束了,我想到後一個漂亮的未處理管理例外,我可以放心地收拾這是不是這樣的)
感謝您的詳細解答! 我會說在這些MS文檔中沒有很好地定義「終止」與「未加載」等詞語。通常情況下,「終止」並不一定意味着它不會被「卸載」,雖然我們在這裏看到它不是這樣的...... – IlyaP
我添加了一些更新來回答「CLR via C#」 – igofed