CurrentThread / ProcessThread对象

在.NET BCL中,有一个CurrentThread和一个ProcessThread对象。 这些有什么区别?

谢谢

System.Threading.Thread类上的CurrentThread静态属性是当前的CLR System.Threading.Thread实例。 CLR Thread是对底层win32线程的抽象。 System.Diagnostics.ProcessThread类提供对win32线程的一次访问,主要用于性能跟踪。

CLR线程的一个关键区别是它们没有固定到win32线程。

当设计.NET 2.0时,它是SQL Server项目的宿醉。 他们迫使CLR团队很难打破.NET Thread类和操作系统线程之间的联系。 他们有理由在当时,SQL Server支持“轻量级”线程,这些线程实现为光纤。 光纤是Windows实现的“共同例程”,大约15年前很流行。

该项目是一个半身像,他们无法让它足够可靠。 遗憾的是,我们没有简单的方法将Thread映射到ProcessThread。 相当亏损。 也许有一天,有人会利用解耦,我还没有看到它完成。

您现在唯一可用的映射是在线程本身内部的P / Invoke GetCurrentThreadId()。 返回一个可以与ProcessThread.Id匹配的TID。