CA2019: ThreadStatic
pola nie powinny używać inline initialization
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 9 | 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.