Bagikan melalui


CA2024: Jangan gunakan StreamReader.EndOfStream dalam metode asinkron

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.