Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Harta benda | Nilai |
|---|---|
| ID Aturan |
CA2024 |
| Judul |
Jangan gunakan StreamReader.EndOfStream dalam metode asinkron |
| Kategori |
Keandalan |
| perbaikan melanggar atau tidak melanggar | Tidak melanggar |
| Diaktifkan secara default di .NET 10 | Sebagai peringatan |
Sebab
Panggilan ke StreamReader.EndOfStream dilakukan di dalam metode asinkron.
Deskripsi aturan
Properti StreamReader.EndOfStream dapat menyebabkan pemblokiran sinkron yang tidak diinginkan ketika tidak ada data yang di-buffer. Sebagai gantinya, gunakan StreamReader.ReadLineAsync() secara langsung, yang mengembalikan null saat mencapai akhir aliran.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, langsung panggil StreamReader.ReadLineAsync() dan periksa nilai pengembalian untuk null.
Contoh
Cuplikan kode berikut menunjukkan pelanggaran CA2024:
public async Task Example(StreamReader streamReader)
{
while (!streamReader.EndOfStream)
{
string? line = await streamReader.ReadLineAsync();
// Do something with line.
}
}
Public Async Function Example(streamReader As StreamReader) As Task
While Not streamReader.EndOfStream
Dim line As String = Await streamReader.ReadLineAsync()
' Do something with line.
End While
End Function
Cuplikan kode berikut memperbaiki pelanggaran:
public async Task Example(StreamReader streamReader)
{
string? line;
while ((line = await streamReader.ReadLineAsync()) is not null)
{
// Do something with line.
}
}
Public Async Function Example(streamReader As StreamReader) As Task
Dim line As String = Await streamReader.ReadLineAsync()
While line IsNot Nothing
' Do something with line.
line = Await streamReader.ReadLineAsync()
End While
End Function
Kapan harus menekan peringatan
Anda tidak boleh menyembunyikan peringatan dari aturan ini, karena aplikasi Anda mungkin macet jika Anda tidak memperbaiki pelanggaran.
Menyembunyikan peringatan
Jika Anda hanya ingin menekan satu pelanggaran, tambahkan arahan preprocessor ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali aturan.
#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi .
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Untuk informasi selengkapnya, lihat Cara menekan peringatan analisis kode.