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 della regola | CA2025 |
Titolo | Non passare istanze 'IDisposable' in attività non attese |
Categoria | Affidabilità |
La modifica è dirompente o non dirompente | Non separabile |
Abilitato per impostazione predefinita in .NET 10 | NO |
Motivo
Un'istanza IDisposable
viene passata a un'attività non attesa e potenzialmente eliminata prima che l'attività venga completata usando l'istanza.
Descrizione della regola
Le attività non attese che usano IDisposable
istanze potrebbero usare tali istanze a lungo dopo l'eliminazione. Assicurarsi che le attività che usano tali istanze vengano completate prima dell'eliminazione delle istanze.
Esempi
I frammenti di codice seguenti (e i relativi equivalenti di Visual Basic) sono violazioni di CA2025:
public Task DoSomethingAsync()
{
// Using statements and using blocks can both be violations.
using (var disposable = new DisposableThing())
{
return DoSomethingInternalAsync(disposable);
}
}
public async Task DoThingsAsync()
{
var disposable = new DisposableThing();
var task = DoSomethingInternalAsync(disposable);
// More code here.
dispose.Dispose();
// It's a violation if arguments are disposed before the task is awaited.
await task.ConfigureAwait(false);
}
Quando eliminare gli avvisi
Eliminare questi avvisi se si conoscono le attività che terminano usando IDisposable
le istanze prima che vengano eliminate.
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 CA2025
// The code that's violating the rule is on this line.
#pragma warning restore CA2025
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none
nel file di configurazione .
[*.{cs,vb}]
dotnet_diagnostic.CA2025.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.