CA2019: ThreadStatic Pole by neměla používat vložené inicializace

Vlastnost Hodnota
ID pravidla CA2019
Název ThreadStatic pole by neměla používat vložené inicializace.
Kategorie Spolehlivost
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Pole s poznámkami ThreadStaticAttribute je inicializováno vloženým nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic).

Popis pravidla

ThreadStaticAttribute pole by měla být inicializována lazily při použití, a ne s vloženou inicializací nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic). static Konstruktor inicializuje pouze pole ve vlákně, které spouští konstruktor typustatic.

Jak opravit porušení

Chcete-li opravit porušení, odeberte inicializaci vloženého nebo static konstruktoru. Místo toho inicializujte pole při prvním použití.

Příklad

Následující fragment kódu ukazuje porušení ca2019:

class C
{
    [ThreadStatic]
    private static Object obj = new();
}
Class C
    <ThreadStatic>
    Private Shared obj As New Object()
End Class

Následující fragment kódu ukazuje, jak opravit narušení:

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

Kdy potlačit upozornění

Je bezpečné potlačit upozornění z tohoto pravidla, ale vaše aplikace může vykazovat neočekávané chování.

Viz také