Aracılığıyla paylaş


CA2024: StreamReader.EndOfStream'i zaman uyumsuz yöntemlerde kullanmayın

Mülk Değer
kural kimliği CA2024
Başlık StreamReader.EndOfStream'i zaman uyumsuz yöntemlerde kullanmayın
Kategori Güvenilirlik
Düzeltmesi bozuk veya hataya neden olmayan Hataya neden olmayan
.NET 10'da varsayılan olarak etkindir Uyarı olarak

Neden

zaman uyumsuz bir yöntem içinde StreamReader.EndOfStream çağrısı yapılır.

Kural açıklaması

StreamReader.EndOfStream özelliği, hiçbir veri arabelleğe alınmadığında istenmeyen zaman uyumlu engellemeye neden olabilir. Bunun yerine doğrudan StreamReader.ReadLineAsync() kullanın ve akışın sonuna ulaşıldığında null döndürür.

İhlalleri düzeltme

Bir ihlali düzeltmek için doğrudan StreamReader.ReadLineAsync() çağırın ve nulliçin dönüş değerini denetleyin.

Örnek

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

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

Aşağıdaki kod parçacığı ihlali düzeltir:

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

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

İhlalleri düzeltmezseniz uygulamanız yanıt vermeyebileceği için bu kuraldaki uyarıları gizlememelisiniz.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için önem derecesiniyapılandırma dosyasında olarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none

Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.