Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| 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 derecesini
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.