我注意到System.Threading.Thread實現了一個終結器,但不是IDisposable。推薦的做法是在實現終結器時始終實現IDisposable。 Jeffrey Richter wrote該準則是「非常重要,應該始終遵循」。爲什麼線程不執行IDisposable?
那麼,爲什麼不線程實現IDisposable?看起來實現IDisposable將是一個非破壞性的改變,它將允許確定性地清理Thread的可終止資源。
和相關的問題:因爲線程是終結,我必須保持引用正在運行的線程,以防止它們在執行過程中被敲定?
由於ManagedThreadID是一個整數,並且可以在線程啓動之前就被讀取,這將表明,事情是創建線程時被分配(哪怕只是數字本身)。雖然創建2億個線程對象的應用程序會很奇怪,但它似乎是一個可能值得釋放的資源。 – supercat 2010-12-22 16:39:55
@supercat:有趣的一點。 'ManagedThreadId'看起來是按順序分配的 - 我不知道在創建超過20億個後會發生什麼。 – 2010-12-22 16:46:51
當Thread對象有資格進行最終化時,id似乎會被重用,所以我懷疑Threading.Thread正在實現Finalize而不是IDIsposable。 – supercat 2010-12-22 16:58:02