Partilhar via


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

Property valor
ID da regra CA2019
Título ThreadStatic Os campos não devem usar inicialização embutida
Categoria Fiabilidade
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

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

Descrição da regra

ThreadStaticAttribute campos devem ser inicializados preguiçosamente no uso e não com inicialização embutida ou explicitamente em um static construtor (Shared no Visual Basic). Um static construtor apenas inicializa o campo no thread que executa o construtor do static tipo.

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