Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
CA2019 : Les champs
| 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 10 | À titre de 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.