Freigeben über


Fibers nicht als Threads behandeln

Aktualisiert: November 2007

     TypeName

DoNotTreatFibersAsThreads

CheckId

CA2003

Kategorie

Microsoft.Reliability

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein verwalteter Thread wird als Win32-Thread behandelt.

Regelbeschreibung

Gehen Sie nicht davon aus, dass ein verwalteter Thread ein Win32-Thread ist, es handelt sich um eine Fiber. Die Common Language Runtime führt verwaltete Threads als Fibers auf den richtigen Threads aus, die SQL besitzt. Diese Threads werden im SQL Server-Prozess über die AppDomains und sogar über die Datenbanken hinweg freigegeben. Das Verwenden von verwaltetem lokalem Threadspeicher funktioniert zwar, doch es wird möglicherweise kein nicht verwalteter lokaler Threadspeicher verwendet, oder es wird möglicherweise nicht angenommen, dass der Code wieder auf dem aktuellen Betriebssystemthread ausgeführt wird. Ändern Sie Einstellungen wie das Gebietsschema des Threads nicht. Rufen Sie nicht CreateCriticalSection oder CreateMutex über P/Invoke auf, da diese erfordern, dass der Thread, der eine Sperre eingibt, die Sperre auch wieder aufhebt. Da dies beim Verwenden von Fibers nicht der Fall ist, werden wichtige Win32-Abschnitte und Mutexe in SQL nutzlos. Sie können die meisten Zustände, einschließlich des verwalteten lokalen Threadspeichers und der aktuellen UI-Kultur des Threads, auf einem verwalteten System.Thread-Objekt sicher verwenden. Aufgrund des Programmiermodells können Sie jedoch die aktuelle Kultur eines Threads beim Ausführen in SQL jedoch nicht ändern (dies wird durch eine neue Berechtigung erzwungen).

Behandlung von Verstößen

Untersuchen Sie die Verwendung von Threads, und ändern Sie den Code entsprechend.

Wann sollten Warnungen unterdrückt werden?

Diese Regel sollte nicht unterdrückt werden.