從MSDN文檔報價爲GC.WaitForPendingFinalizers():在.NET中,GC.WaitForPendingFinalizers()在哪些情況下阻塞?
上終結器運行的線程是不確定的,所以不能保證此方法將終止。
我真的不明白這句話。這種方法在哪種情況下不會終止?這與終結器運行的線程有什麼關係?他們爲什麼說這個線程是「未指定的」?
關於終結器線程,我認爲以下是正確的(?):
- 這裏只有一個終結線程。
- 終結器總是在單獨的線程上運行(即永遠不會在主線程或任何其他用戶創建的線程上運行)。
注:我能想象當終結塊之一,但這個問題存在,不管使用什麼樣的線程的終結這種方法將阻塞。
好的,但爲什麼該文檔明確指出「運行終結器的線程未指定」?僅僅寫「不能保證這種方法會終止(因爲阻塞終結器)」? –
我認爲這是說CLR團隊希望將來有權更改實施細節,他們不希望您指望今天的工作方式。事實是,他們在自己的線程上運行(不是所謂的GC.Collect)。 –
通過C#在Richter的CLR中,我相信他提到了(很像Shahar寫的),將來CLR可能會使用多個終結器線程。我沒有這本書,但我認爲可以在其中找到深入的討論,這可能會更好地回答你的問題。 –