CA2019: ThreadStatic i campi non devono usare l'inizializzazione inline

Proprietà valore
ID regola CA2019
Title ThreadStatic i campi non devono usare l'inizializzazione inline
Categoria Affidabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Un campo con ThreadStaticAttribute annotazioni viene inizializzato inline o in modo esplicito in un static costruttore (Shared in Visual Basic).

Descrizione regola

ThreadStaticAttribute i campi devono essere inizializzati in modo differita in caso di utilizzo e non con inizializzazione inline o in modo esplicito in un static costruttore (Shared in Visual Basic). Un static costruttore inizializza solo il campo nel thread che esegue il costruttore del static tipo.

Come correggere una violazione

Per correggere una violazione, rimuovere l'inizializzazione inline o static del costruttore. Inizializzare invece il campo al primo utilizzo.

Esempio

Il frammento di codice seguente mostra una violazione di CA2019:

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

Il frammento di codice seguente illustra come correggere una violazione:

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

Quando eliminare gli avvisi

È possibile eliminare un avviso da questa regola, ma l'app potrebbe presentare un comportamento imprevisto.

Vedi anche