CA1849: Wywoływanie metod asynchronicznych w przypadku metody asynchronicznej
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1849 |
Tytuł | Wywoływanie metod asynchronicznych w przypadku metody asynchronicznej |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | 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>.Result
lub 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.