CA1849: Volání asynchronních metod v asynchronní metodě
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1849 |
Název | Volání asynchronních metod v asynchronní metodě |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Všechny metody, ve kterých existuje ekvivalent s příponou Async, vytvoří toto upozornění při volání z metody vracející úlohu. Kromě toho volání Task.Wait()
, Task<T>.Result
nebo Task.GetAwaiter().GetResult()
vyvolá toto upozornění.
Popis pravidla
V metodě, která je již asynchronní, by volání jiných metod měla být jejich asynchronní verze, kde existují.
Jak opravit porušení
Porušení:
Task DoAsync()
{
file.Read(buffer, 0, 10);
}
Oprava:
Vyčkejte asynchronní verzi metody:
async Task DoAsync()
{
await file.ReadAsync(buffer, 0, 10);
}
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla v případě, že existují dvě samostatné cesty kódu pro synchronizaci a asynchronní kód pomocí podmínky if. Pokud existuje také kontrola, jestli se úloha vyřešila, je bezpečné používat metody a vlastnosti synchronizace.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.