CA1849: Wywoływanie metod asynchronicznych w przypadku metody asynchronicznej

Właściwości Wartość
Identyfikator reguły CA1849
Stanowisko Wywoływanie metod asynchronicznych w przypadku metody asynchronicznej
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Wszystkie metody, w których istnieje odpowiednik async-sufiks, spowoduje wygenerowanie tego ostrzeżenia po wywołaniu z metody zwracanej przez zadanie. Ponadto wywołanie metody Task.Wait(), Task<T>.Resultlub Task.GetAwaiter().GetResult() spowoduje wygenerowanie tego ostrzeżenia.

Opis reguły

W metodzie, która jest już asynchroniczna, wywołania innych metod powinny dotyczyć ich wersji asynchronicznych, w których istnieją.

Jak naprawić naruszenia

Naruszenie:

Task DoAsync()
{
    file.Read(buffer, 0, 10);
}

Poprawka:

Poczekaj na wersję asynchronicznej metody:

async Task DoAsync()
{
    await file.ReadAsync(buffer, 0, 10);
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły w przypadku, gdy istnieją dwie oddzielne ścieżki kodu do synchronizacji i kodu asynchronicznego, używając warunku if. Ponadto w przypadku sprawdzenia, czy zadanie zostało rozwiązane, można bezpiecznie używać metod i właściwości synchronizacji.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też