Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
CA2019:
| Proprietà | valore |
|---|---|
| ID regola | CA2019 |
| Title |
ThreadStatic i campi non devono usare l'inizializzazione inline |
| Categoria | Affidabilità |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
Causa
Un campo con ThreadStaticAttribute annotazioni viene inizializzato inline o in modo esplicito in un static costruttore (Shared in Visual Basic).
Descrizione regola
ThreadStaticAttribute i campi devono essere inizializzati in modo differita in caso di utilizzo e non con inizializzazione inline o in modo esplicito in un static costruttore (Shared in Visual Basic). Un static costruttore inizializza solo il campo nel thread che esegue il costruttore del static tipo.
Come correggere una violazione
Per correggere una violazione, rimuovere l'inizializzazione inline o static del costruttore. Inizializzare invece il campo al primo utilizzo.
Esempio
Il frammento di codice seguente mostra una violazione di CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Il frammento di codice seguente illustra come correggere una violazione:
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
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola, ma l'app potrebbe presentare un comportamento imprevisto.