Bagikan melalui


CA2019: ThreadStatic bidang tidak boleh menggunakan inisialisasi sebaris

Properti Nilai
ID Aturan CA2019
Judul ThreadStatic bidang tidak boleh menggunakan inisialisasi sebaris
Golongan Keandalan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Bidang yang dianotasikan dengan ThreadStaticAttribute diinisialisasi sebaris atau secara eksplisit dalam static konstruktor (Shared di Visual Basic).

Deskripsi aturan

ThreadStaticAttribute bidang harus diinisialisasi dengan malas saat digunakan dan bukan dengan inisialisasi sebaris atau secara eksplisit dalam static konstruktor (Shared di Visual Basic). static Konstruktor hanya menginisialisasi bidang pada utas yang menjalankan konstruktor jenisstatic.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, hapus inisialisasi sebaris atau static konstruktor. Sebagai gantinya, inisialisasi bidang pada penggunaan pertama.

Contoh

Cuplikan kode berikut menunjukkan pelanggaran CA2019:

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

Cuplikan kode berikut menunjukkan cara memperbaiki pelanggaran:

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

Kapan harus menekan peringatan

Aman untuk menekan peringatan dari aturan ini, tetapi aplikasi Anda mungkin menunjukkan perilaku yang tidak terduga.

Baca juga