CA2019: ThreadStatic alanlar satır içi başlatma kullanmamalıdır

Özellik Değer
Kural Kimliği CA2019
Başlık ThreadStatic alanlar satır içi başlatma kullanmamalıdır
Kategori Güvenilirlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

ile ThreadStaticAttribute ek açıklama ekli alan satır içinde veya açıkça bir static (Shared Visual Basic'te) oluşturucuda başlatılır.

Kural açıklaması

ThreadStaticAttribute alanlar, satır içi başlatma ile değil, kullanımda veya açıkça bir static (Shared Visual Basic'te) oluşturucuda başlatılmalıdır. Oluşturucu static yalnızca türün static oluşturucuyu çalıştıran iş parçacığında alanı başlatır.

İhlal nasıl düzeltilir?

Bir ihlali düzeltmek için satır içi veya static oluşturucu başlatmasını kaldırın. Bunun yerine, alanı ilk kullanımda başlatın.

Örnek

Aşağıdaki kod parçacığı CA2019 ihlalini gösterir:

class C
{
    [ThreadStatic]
    private static Object obj = new();
}
Class C
    <ThreadStatic>
    Private Shared obj As New Object()
End Class

Aşağıdaki kod parçacığı bir ihlalin nasıl düzeltileceğini gösterir:

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

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan gelen bir uyarıyı engellemek güvenlidir, ancak uygulamanız beklenmeyen davranışlar gösterebilir.

Ayrıca bkz.