CA2019: los campos ThreadStatic
no deben usar la inicialización insertada
Propiedad | Value |
---|---|
Identificador de la regla | CA2019 |
Título | Los campos ThreadStatic no deben usar la inicialización insertada |
Categoría | Confiabilidad |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 8 | Como sugerencia |
Causa
Un campo anotado con ThreadStaticAttribute se inicializa insertado o explícitamente en un constructor static
(Shared
en Visual Basic).
Descripción de la regla
Los campos ThreadStaticAttribute se deben inicializar de forma diferida en uso y no con inicialización insertada o explícitamente en un constructor static
(Shared
en Visual Basic). Un constructor static
solo inicializa el campo en el subproceso que ejecuta el constructor del tipo static
.
Corrección de una infracción
Para corregir una infracción, quite la inicialización insertada o el constructor static
. En su lugar, inicialice el campo en el primer uso.
Ejemplo
En el siguiente fragmento de código se muestra una infracción de la regla CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
En el fragmento de código siguiente se muestra cómo corregir una infracción:
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
Cuándo suprimir las advertencias
Es seguro suprimir una advertencia de esta regla, pero la aplicación podría presentar un comportamiento inesperado.