Condividi tramite


CA1849: Chiamare metodi asincroni 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 rompente
Abilitato per impostazione predefinita in .NET 10 No
Linguaggi applicabili C# e Visual Basic

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 a Task.Wait(), 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.

Vedi anche