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.