Freigeben über


CA1849: Asynchrone Methoden aufrufen, wenn man sich in einer asynchronen Methode befindet

Eigenschaft Wert
Regel-ID CA1849
Titel Asynchrone Methoden in einer asynchronen Methode aufrufen
Kategorie Leistung
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

Ursache

Alle Methoden, für die ein Äquivalent mit dem Suffix 'Async' existiert, 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.

So beheben Sie Verstöße

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 auf none in der Konfigurationsdatei fest.

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

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

Siehe auch