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.