CA2019: ThreadStatic
fält bör inte använda infogad initiering
Property | Värde |
---|---|
Regel-ID | CA2019 |
Title | ThreadStatic fält bör inte använda infogad initiering |
Kategori | Tillförlitlighet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Ett fält som kommenteras med ThreadStaticAttribute initieras infogat eller explicit i en static
(Shared
i Visual Basic) konstruktor.
Regelbeskrivning
ThreadStaticAttribute fält bör initieras lazily vid användning och inte med infogad initiering eller explicit i en static
(Shared
i Visual Basic) konstruktor. En static
konstruktor initierar bara fältet på tråden som kör typens static
konstruktor.
Så här åtgärdar du en överträdelse
Åtgärda en överträdelse genom att ta bort den infogade initieringen eller static
konstruktorns initiering. Initiera i stället fältet vid första användningen.
Exempel
Följande kodfragment visar ett brott mot CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Följande kodfragment visar hur du åtgärdar en överträdelse:
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
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln, men din app kan uppvisa oväntat beteende.