CA2019: ThreadStatic
-Felder sollten keine Inlineinitialisierung verwenden
Eigenschaft | Wert |
---|---|
Regel-ID | CA2019 |
Titel | ThreadStatic -Felder sollten keine Inlineinitialisierung verwenden |
Kategorie | Zuverlässigkeit |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Ein Feld, das mit einer ThreadStaticAttribute-Anmerkung versehen ist, wird inline oder explizit in einem static
-Konstruktor (Shared
in Visual Basic) initialisiert.
Regelbeschreibung
ThreadStaticAttribute-Felder sollten bei der Verwendung verzögert initialisiert werden und nicht durch Inlineinitialisierung oder explizit in einem static
-Konstruktor (Shared
in Visual Basic). Ein static
-Konstruktor initialisiert nur das Feld für den Thread, der den static
-Konstruktor des Typs ausführt.
Beheben einer Verletzung
Um eine Verletzung zu beheben, entfernen Sie die Inline- oder static
-Konstruktorinitialisierung. Initialisieren Sie das Feld stattdessen bei der ersten Verwendung.
Beispiel
Der folgende Codeschnipsel zeigt eine Verletzung von CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Der folgende Codeschnipsel zeigt, wie eine Verletzung behoben wird:
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
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, eine Warnung von dieser Regel zu unterdrücken, aber Ihre App könnte unerwartetes Verhalten aufweisen.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für