Dela via


CA1849: Anropa asynkrona metoder när du är i en asynkron metod

Egenskap Värde
Regel-ID CA1849
Title Anropa asynkrona metoder i en asynkron metod
Kategori Prestanda
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

Alla metoder där en motsvarighet med Async-suffix finns genererar den här varningen när den anropas från en metod som returnerar en uppgift. Dessutom genererar anropet Task.Wait(), Task<T>.Result, eller Task.GetAwaiter().GetResult() den här varningen.

Regelbeskrivning

I en metod som redan är asynkron bör anrop till andra metoder vara till deras asynkrona versioner, där de finns.

Så här åtgärdar du överträdelser

Överträdelse:

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

Lösningen

Vänta på metodens asynkrona version:

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

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om det finns två separata kodsökvägar för synkronisering och asynkron kod, med hjälp av ett if-villkor. Om det också finns en kontroll av om uppgiften har lösts är det säkert att använda synkroniseringsmetoder och egenskaper.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även