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.

Vea también