Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
CA2019:
| 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.