Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
CA2019: los campos
| 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 10 | 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.