Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
CA2019:
| 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.