Sdílet prostřednictvím


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>.Resultnebo 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.

Viz také