C# Thread类中Thread.BeginThreadAffinity()方法的用途是什么?

C# Thread类中Thread.BeginThreadAffinity()方法的用途是什么?,c#,multithreading,C#,Multithreading,Thread类中的Thread.BeginThreadAffinity()方法有什么用途? 如果你能提供它的示例并加以说明,这将有助于我理解 谢谢。您是否阅读了本手册的备注部分。这在我看来解释得很好 共同语言的一些宿主 运行时,如Microsoft SQL Server 2005年,提供自己的线程 管理层。提供它的主机 自己的线程管理可以移动 从一个物理层执行任务 操作系统线程到另一个线程 随时都可以。大多数任务不受影响 通过这种转换。然而,有些任务 具有线程亲和力-即 依赖于物理实体的身份 操

Thread类中的
Thread.BeginThreadAffinity()
方法有什么用途? 如果你能提供它的示例并加以说明,这将有助于我理解


谢谢。

您是否阅读了本手册的备注部分。这在我看来解释得很好

共同语言的一些宿主 运行时,如Microsoft SQL Server 2005年,提供自己的线程 管理层。提供它的主机 自己的线程管理可以移动 从一个物理层执行任务 操作系统线程到另一个线程 随时都可以。大多数任务不受影响 通过这种转换。然而,有些任务 具有线程亲和力-即 依赖于物理实体的身份 操作系统线程。这些任务 必须在执行时通知主机 不应切换的代码

例如,如果应用程序调用 获取操作系统的系统API 具有线程关联的系统锁, 例如Win32 CRITICAL_部分,您可以 必须在之前调用BeginThreadAffinity 获取锁,以及 释放后的EndThreadAffinity 锁


在.NET1.x中,线程始终与操作系统线程相匹配。在SQL Server团队的请求下,.NET 2.0打破了这种关联。CLR主机现在可以控制线程映射本身,它是线程映射的工作马接口。这里面有一个很好的背景

有时代码确实关心它是否在特定的操作系统线程上运行。Windows关键部分和突变体就是一个例子。实际上,任何类型的非托管代码互操作。Thread.BeginThreadAffinity()调用IHostTaskManager::BeginThreadAffinity(),让主机知道不应允许该任务在另一个操作系统线程上运行,而应在调用EndThreadAffinity()之前,继续执行该任务当前所在的线程


但是,不要担心这些。SQL Server项目失败了,他们无法得到可靠的结果。没有迹象表明他们会再试一次。

SQLCLR并不完美,但它满足了需要。肯定比扩展存储过程好。“你为什么认为它这么糟糕?”binarycoder,不,不是那个。bust试图在光纤上运行sqlclr代码。