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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de