为什么Thread没有实现IDisposable?

时间:2009-11-11 17:45:56

标签: c# multithreading idisposable finalizer

我注意到System.Threading.Thread实现了终结器但不是IDisposable。建议的做法是在实现终结器时始终实现IDisposable。 Jeffrey Richter wrote指南“非常重要,应该始终遵循”。

那么为什么Thread没有实现IDisposable?看起来实现IDisposable似乎是一个非破坏性的变化,可以确定性地清理Thread的可终结资源。

还有一个相关问题:由于线程是可终结的,我是否必须保持对运行线程的引用以防止它们在执行期间被最终确定?

3 个答案:

答案 0 :(得分:8)

处置Thread对象会有什么影响呢?在这种情况下,“资源”有自己的自然清理 - 线程完成。请注意,缺少所有权感......在执行线程中,您始终可以使用Thread.CurrentThread,因此只有该线程才能真正声明任何所有权。

基本上我认为Thread是一个稍微不同寻常的情况 - 底层资源有一个生命周期,但它不是应该明确清理的东西。

答案 1 :(得分:3)

这可能是因为你不能处理一个线程。相反,你可以使用Abort()或类似的方式让它死亡。

答案 2 :(得分:1)

这是一个设计问题,所以任何不参与构建.NET这方面的人都只能推测。话虽如此,this blog post提出了一个很好的观点:

  

...实现IDisposable不会有任何区别,至少在Thread的当前实现中是这样。我增加了创建的线程数,并且句柄数量在某个时候下降,所以有一些关闭它们的机制

线程自然会自然清理,因此它们不是需要在典型意义上管理的资源。