Udostępnij za pośrednictwem


CA1849: Wywołuj metody asynchroniczne, gdy znajdujesz się w metodzie asynchronicznej

Właściwości Wartość
Identyfikator reguły CA1849
Tytuł Wywołuj metody asynchroniczne, gdy jesteś w metodzie asynchronicznej
Kategoria Wydajność
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

Wszystkie metody, które mają odpowiednik z przyrostkiem Async, spowodują wygenerowanie tego ostrzeżenia, gdy zostaną wywołane z metody zwracającej 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ż