Partilhar via


CA2019: ThreadStatic os campos não devem usar inicialização embutida

Propriedade valor
ID da regra CA2019
Título ThreadStatic Os campos não devem usar inicialização embutida
Categoria Fiabilidade
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Como sugestão
Línguas aplicáveis C# e Visual Basic

Motivo

Um campo anotado com ThreadStaticAttribute é inicializado em linha ou explicitamente num construtor static (Shared no Visual Basic).

Descrição da regra

ThreadStaticAttribute campos devem ser inicializados de forma preguiçosa no uso e não com inicialização inline ou explicitamente num construtor static (Shared no Visual Basic). Um static construtor apenas inicializa o campo na thread que executa o construtor do tipo static.

Como corrigir uma violação

Para corrigir uma violação, remova a inicialização embutida ou static do construtor. Em vez disso, inicialize o campo na primeira utilização.

Exemplo

O trecho de código a seguir mostra uma violação do CA2019:

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

O trecho de código a seguir mostra como corrigir uma violação:

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 suprimir avisos

É seguro suprimir um aviso dessa regra, mas seu aplicativo pode apresentar um comportamento inesperado.

Consulte também