不要将纤程视为线程

更新:2007 年 11 月

TypeName

DoNotTreatFibersAsThreads

CheckId

CA2003

类别

Microsoft.Reliability

是否重大更改

原因

托管线程被视为 Win32 线程。

规则说明

不要将托管线程假定为 Win32 线程,它是纤程。CLR 会将托管线程作为 SQL 所拥有的真实线程之上的纤程来运行。这些线程将在 AppDomain 之间甚至 SQL Server 进程中的数据库之间共享。可以使用托管线程本地存储区,但不能使用非托管线程本地存储区,也不能假定代码将再次运行在当前操作系统线程上。不要更改类似线程区域设置这样的设置。不要通过 P/Invoke 调用 CreateCriticalSection 或 CreateMutex,因为它们需要能够进入锁也能够退出锁的线程。由于使用纤程不会出现上述问题,因此 Win32 临界区和 mutex 在 SQL 中毫无用处。您可以在托管 System.Thread 对象上安全地使用大部分状态,包括托管线程本地存储区和线程的当前 UI 区域性。但由于要使用编程模型,因此在 SQL 中运行时将不能更改线程的当前区域性,这一点将通过新的权限来强制实现。

如何修复冲突

检查线程的使用情况并对代码进行相应的更改。

何时禁止显示警告

不应禁止显示此规则。