10

我注意到 System.Threading.Thread 实现了终结器,但没有实现 IDisposable。推荐的做法是在实现终结器时始终实现 IDisposable。Jeffrey Richter写道,该指南“非常重要,应始终毫无例外地遵循”。

那么为什么 Thread 不实现 IDisposable 呢?似乎实现 IDisposable 将是一项非破坏性更改,它将允许确定性地清理 Thread 的可终结资源。

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

4

3 回答 3

8

处置Thread对象会做什么?在这种情况下,“资源”有它自己的自然清理——线程整理。请注意,所有权感也缺失了……在执行线程中,您始终可以使用Thread.CurrentThread,因此只有该线程才能真正声明任何类型的所有权。

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

于 2009-11-11T17:49:22.510 回答
3

那可能是因为您无法处理线程。相反,您可以使用Abort()或类似方法要求它死掉。

于 2009-11-11T17:50:34.643 回答
1

这是一个设计问题,因此没有参与构建 .NET 的这方面的任何人都只能推测。话虽如此,这篇博文提出了一个很好的观点:

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

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

于 2009-11-11T17:51:12.193 回答