CA2019: ThreadStatic
Pole by neměla používat vložené inicializace
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2019 |
Název |
ThreadStatic pole by neměla používat vložené inicializace. |
Kategorie | Spolehlivost |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Pole s poznámkami ThreadStaticAttribute je inicializováno vloženým nebo explicitně v konstruktoru static
(Shared
v jazyce Visual Basic).
Popis pravidla
ThreadStaticAttribute pole by měla být inicializována lazily při použití, a ne s vloženou inicializací nebo explicitně v konstruktoru static
(Shared
v jazyce Visual Basic).
static
Konstruktor inicializuje pouze pole ve vlákně, které spouští konstruktor typustatic
.
Jak opravit porušení
Chcete-li opravit porušení, odeberte inicializaci vloženého nebo static
konstruktoru. Místo toho inicializujte pole při prvním použití.
Příklad
Následující fragment kódu ukazuje porušení ca2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Následující fragment kódu ukazuje, jak opravit narušení:
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
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla, ale vaše aplikace může vykazovat neočekávané chování.