Freigeben über


CA2003: Fibers nicht als Threads behandeln.

Element Wert
RuleId CA2003
Category Microsoft.Reliability
Unterbrechende Änderung Nicht unterbrechend

Ursache

Ein verwalteter Thread wird als Win32-Thread behandelt.

Hinweis

Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.

Regelbeschreibung

Gehen Sie nicht davon aus, dass ein verwalteter Thread ein Win32-Thread ist. Ein verwalteter Thread ist eine Fiber. Die Common Language Runtime (CLR) führt verwaltete Threads als Fibers im Kontext von echten Threads im Besitz von SQL aus. Diese Threads können für Anwendungsdomänen und sogar Datenbanken im SQL Server-Prozess freigegeben werden. Die Verwendung von verwaltetem threadlokalem Speicher ist möglich, jedoch können Sie keinen nicht verwalteten threadlokalen Speicher verwenden. Sie können auch nicht davon ausgehen, dass Ihr Code erneut im aktuellen Betriebssystemthread ausgeführt wird. Ändern Sie keine Einstellungen, z. B. das Gebietsschema des Threads. CreateCriticalSection oder CreateMutex erfordern, dass der gesperrte Thread auch wieder entsperrt wird. Rufen Sie sie daher nicht über P/Invoke auf. Da der gesperrte Thread bei der Verwendung von Fibers nicht entsperrt wird, sind kritische Win32-Abschnitte und Win32-Mutexe in SQL nutzlos. Sie können die meisten Zustände eines verwalteten Thread-Objekts (einschließlich des verwalteten threadlokalen Speichers und der aktuellen Benutzeroberflächenkultur des Threads) sicher verwenden. Aufgrund des Programmiermodells können Sie die aktuelle Kultur eines Threads jedoch nicht ändern, wenn Sie SQL verwenden. Diese Einschränkung wird durch eine neue Berechtigung erzwungen.

Behandeln von Verstößen

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

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie diese Regel nicht.