CA2019: ThreadStatic
velden mogen geen inline initialisatie gebruiken
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2019 |
Titel | ThreadStatic velden mogen geen inline initialisatie gebruiken |
Categorie | Betrouwbaarheid |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een veld met ThreadStaticAttribute aantekeningen wordt geïnitialiseerd of expliciet in een static
constructor (Shared
in Visual Basic).
Beschrijving van regel
ThreadStaticAttribute velden moeten lazily worden geïnitialiseerd voor gebruik en niet met inline initialisatie of expliciet in een static
constructor (Shared
in Visual Basic). Een static
constructor initialiseert alleen het veld op de thread waarop de constructor van static
het type wordt uitgevoerd.
Een schending oplossen
Als u een schending wilt oplossen, verwijdert u de initialisatie van de inline of static
constructor. Initialiseer in plaats daarvan het veld bij eerste gebruik.
Opmerking
In het volgende codefragment ziet u een schending van CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
In het volgende codefragment ziet u hoe u een schending kunt oplossen:
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
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken, maar uw app kan onverwacht gedrag vertonen.