Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
CA2019: os campos
| 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 10 | 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.