CA2019: os campos ThreadStatic
não devem usar inicialização em linha
Property | Valor |
---|---|
ID da regra | CA2019 |
Título | Os campos ThreadStatic não devem usar a inicialização em linha |
Categoria | Confiabilidade |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Um campo anotado com ThreadStaticAttribute é inicializado em linha ou explicitamente em um constructo static
(Shared
no Visual Basic).
Descrição da regra
Os campos ThreadStaticAttribute devem ser inicializados de forma lenta em uso e não com inicialização em linha ou explicitamente em um constructostatic
(Shared
no Visual Basic). Um constructo static
inicializa apenas o campo no thread que executa o constructo de static
do tipo.
Como corrigir uma violação
Para corrigir uma violação, remova a inicialização em linha ou static
do constructo. Em vez disso, inicialize o campo no primeiro uso.
Exemplo
O seguinte snippet de código mostra uma violação de CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
O snippet 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.