Udostępnij za pośrednictwem


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 8 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.

Zobacz też