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