CA2003: Nie traktuj włókien jako wątków
TypeName |
DoNotTreatFibersAsThreads |
CheckId |
CA2003 |
Kategoria |
Microsoft.Reliability |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Zarządzalny wątek jest traktowany jako wątek Win32.
Opis reguły
Nie należy zakładać, że zarządzany wątek jest wątkiem Win32.Jest włóknem (wątkiem lekkim).Common language runtime (CLR) będzie uruchamiać wątki zarządzane jako włókna (wątki lekkie) w kontekście rzeczywistych wątków, które są własnością SQL.Wątki te mogą być współużytkowane między domenami AppDomains a nawet bazami danych w procesach SQL Server.Używanie magazynu lokalnego zarządzanych wątków będzie działać, ale nie można używać lokalnego magazynu wątków niezarządzanych lub zakładać, że kod będzie ponownie uruchomiony na bieżącym wątku OS.Nie należy zmieniać ustawień, takich jak element locale wątku.Nie należy wywoływać CreateCriticalSection lub CreateMutex przez P/Invoke, ponieważ wymagają one, aby wątek, który wprowadza blokadę także ją zamykał.Ponieważ nie będzie tak w przypadku użycia włókien, sekcje krytyczne Win32 i Muteksy będą bezużyteczne w SQL.Można bezpiecznie korzystać z większości stanu na zarządzanym obiekcie System.Thread.Obejmuje to lokalny magazyn wątków zarządzanych i bieżącą kulturę wątku interfejsu użytkownika.Jednakże z przyczyn modelu programowania, nie będzie można zmienić bieżącej kultury wątku przy użyciu SQL; będzie to wykonywane poprzez nowe uprawnienie.
Jak naprawić naruszenia
Należy zbadać użycie wątków i odpowiednio zmienić kod.
Kiedy pominąć ostrzeżenia
Nie należy pomijać tej reguły.