CA2019 : Les champs ThreadStatic
ne doivent pas utiliser l’initialisation inline
Propriété | Value |
---|---|
Identificateur de la règle | CA2019 |
Titre | Les champs ThreadStatic ne doivent pas utiliser l’initialisation inline |
Catégorie | Fiabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Comme suggestion |
Cause
Un champ annoté avec ThreadStaticAttribute est initialisé inline ou explicitement dans un constructeur static
(Shared
en Visual Basic).
Description de la règle
Les champs ThreadStaticAttribute doivent être initialisés de manière différée pendant l’utilisation, et non avec une initialisation inline ou explicitement dans un constructeur static
(Shared
en Visual Basic). Un constructeur static
initialise uniquement le champ sur le thread qui exécute le constructeur static
du type.
Comment corriger une violation
Pour corriger une violation, supprimez l’initialisation du constructeur static
ou l’initialisation inline. À la place, initialisez le champ pendant la première utilisation.
Exemple
L’extrait de code suivant montre une violation de CA2019 :
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
L’extrait de code suivant montre comment corriger une violation :
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
Quand supprimer les avertissements
Vous pouvez supprimer un avertissement de cette règle, mais votre application risque de présenter un comportement inattendu.