Kommentar
Å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:
| Egenskap | Värde |
|---|---|
| Regel-ID | CA2019 |
| Title |
ThreadStatic fält bör inte använda inline-initiering |
| Kategori | Tillförlitlighet |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Som förslag |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Ett fält som är märkt med ThreadStaticAttribute initieras inline eller explicit i en static-konstruktor (Shared i Visual Basic).
Regelbeskrivning
ThreadStaticAttribute fält bör initieras fördröjt vid användning och inte med initiering in-line 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 initieringen av static konstruktorn. 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.