Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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 10 | 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.