我注意到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