Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CA2019:
| 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 10 | 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í.