Teilen über


CA1849: Asynchrone Methoden in einer asynchronen Methode aufrufen

Eigenschaft Wert
Regel-ID CA1849
Titel Asynchrone Methoden in einer asynchronen Methode aufrufen
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Alle Methoden, bei denen ein Äquivalent mit asynchronen Suffixen vorhanden ist, erzeugen diese Warnung, wenn sie von einer Methode aufgerufen werden, die einen Task zurückgibt. Darüber hinaus wird diese Warnung durch das Aufrufen von Task.Wait(), Task<T>.Result oder Task.GetAwaiter().GetResult() ausgegeben.

Regelbeschreibung

Bei einer Methode, die bereits asynchron ist, sollten Aufrufe anderer Methoden an ihre asynchronen Versionen erfolgen, sofern sie vorhanden sind.

Behandeln von Verstößen

Verstoß:

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

Korrektur:

Warten Sie auf die asynchrone Version der Methode:

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

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, unter Verwendung einer if-Bedingung eine Warnung von dieser Regel zu unterdrücken, wenn es zwei separate Codepfade für synchronen und asynchronen Code gibt. Wenn außerdem überprüft wird, ob der Task aufgelöst wurde, ist es sicher, Synchronisierungsmethoden und -eigenschaften zu verwenden.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch