Condividi tramite


Interfaccia System.IAsyncDisposable

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

In .NET le classi proprietarie di risorse non gestite implementano in genere l'interfaccia IDisposable per fornire un meccanismo per rilasciare le risorse non gestite in modo sincrono. Tuttavia, in alcuni casi è necessario fornire un meccanismo asincrono per rilasciare risorse non gestite oltre a (o invece) a quello sincrono. La fornitura di un meccanismo di questo tipo consente al consumer di eseguire operazioni di eliminazione a elevato utilizzo di risorse senza bloccare il thread principale di un'applicazione GUI per molto tempo.

Il IAsyncDisposable.DisposeAsync metodo di questa interfaccia restituisce un oggetto ValueTask che rappresenta l'operazione dispose asincrona. Le classi che possiedono risorse non gestite implementano questo metodo e il consumer di queste classi chiama questo metodo su un oggetto quando non è più necessario.

I metodi asincroni vengono usati insieme alle async parole chiave e await in C# e Visual Basic. Per altre informazioni, vedere Il modello di programmazione asincrona Attività in C# o Programmazione asincrona con Async e Await (Visual Basic).For more information, see The Task asynchronous programming model in C# or Asynchronous Programming with Async and Await (Visual Basic).

Usare un oggetto che implementa IAsyncDisposable

Se l'applicazione usa un oggetto che implementa IAsyncDisposable, è necessario chiamare l'implementazione dell'oggetto al termine dell'uso DisposeAsync . Per assicurarsi che le risorse vengano rilasciate anche in caso di eccezione, inserire il codice che usa l'oggetto nell'istruzione using (in C# a partire dalla versione 8.0) o chiamare il DisposeAsync metodo all'interno di una finally clausola dell'istruzione try/finally .IAsyncDisposable Per altre informazioni sul try/finally modello, vedere try-finally (C#) o Try... Prendere... Istruzione Finally (Visual Basic).

Implementare IAsyncDisposable

È possibile implementare IAsyncDisposable nelle situazioni seguenti:

  • Quando si sviluppa un enumeratore asincrono proprietario di risorse non gestite. Gli enumeratori asincroni vengono usati con la funzionalità flussi asincroni C# 8.0. Per altre informazioni sui flussi asincroni, vedere Esercitazione: Generare e usare flussi asincroni con C# 8.0 e .NET Core 3.0.
  • Quando la classe possiede risorse non gestite e le rilascia richiede un'operazione di I/O a elevato utilizzo di risorse, ad esempio lo scaricamento del contenuto di un buffer intermedio in un file o l'invio di un pacchetto su una rete per chiudere una connessione.

Usare il DisposeAsync metodo per eseguire la pulizia necessaria dopo aver usato le risorse non gestite, ad esempio liberare, rilasciare o reimpostare le risorse non gestite. Per altre informazioni, vedere Implementare un metodo DisposeAsync.