Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
CA2019:
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA2019 |
| Tytuł |
ThreadStatic pola nie powinny używać inline initialization |
| Kategoria | Niezawodność |
| Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
Przyczyna
Pole z adnotacjami ThreadStaticAttribute jest inicjowane w tekście lub jawnie w konstruktorze static (Shared w Visual Basic).
Opis reguły
ThreadStaticAttribute pola powinny być inicjowane z opóźnieniem w użyciu, a nie przy inicjalizacji wbudowanej lub jawnie w konstruktorze static (Shared w Visual Basic). Konstruktor static inicjuje tylko pole w wątku, który uruchamia konstruktor typu static .
Jak naprawić naruszenie
Aby naprawić naruszenie, usuń inline lub static inicjowanie konstruktora. Zamiast tego zainicjuj pole przy pierwszym użyciu.
Przykład
Poniższy fragment kodu przedstawia naruszenie ca2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Poniższy fragment kodu pokazuje, jak naprawić naruszenie:
class C
{
[ThreadStatic]
private static Object obj;
static void S1()
{
obj ??= new Object();
}
}
Class C
<ThreadStatic>
Private Shared obj
Shared Sub S1()
If obj Is Nothing Then
obj = New Object()
End If
End Sub
End Class
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, ale aplikacja może wykazywać nieoczekiwane zachowanie.