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 9 | 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.