Condividi tramite


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>.Resulto 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.

Vedi anche