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.

Voir aussi