CA1849: Chiamare metodi asincroni quando si trova in un metodo asincrono
Proprietà | valore |
---|---|
ID regola | CA1849 |
Title | Chiamare metodi asincroni quando si trova in un metodo asincrono |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Tutti i metodi in cui esiste un equivalente con suffisso Async genereranno questo avviso quando viene chiamato da un metodo restituito da Task. Inoltre, la chiamata Task.Wait()
a , Task<T>.Result
o Task.GetAwaiter().GetResult()
genererà questo avviso.
Descrizione regola
In un metodo che è già asincrono, le chiamate ad altri metodi devono essere alle versioni asincrone, dove esistono.
Come correggere le violazioni
Violazione:
Task DoAsync()
{
file.Read(buffer, 0, 10);
}
Correzione:
Attendere la versione asincrona del metodo :
async Task DoAsync()
{
await file.ReadAsync(buffer, 0, 10);
}
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola nel caso in cui siano presenti due percorsi di codice separati per la sincronizzazione e il codice asincrono, usando una condizione if. Inoltre, se è presente un controllo per verificare se l'attività è stata risolta, è possibile usare metodi e proprietà di sincronizzazione.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.