Interfaz System.IAsyncDisposable

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

En .NET, las clases que poseen recursos no administrados suelen implementar la IDisposable interfaz para proporcionar un mecanismo para liberar recursos no administrados de forma sincrónica. Sin embargo, en algunos casos deben proporcionar un mecanismo asincrónico para liberar recursos no administrados además de (o en lugar de) el sincrónico. Proporcionar este mecanismo permite al consumidor realizar operaciones de eliminación intensivas de recursos sin bloquear el subproceso principal de una aplicación de GUI durante mucho tiempo.

El IAsyncDisposable.DisposeAsync método de esta interfaz devuelve un ValueTask que representa la operación de eliminación asincrónica. Las clases que poseen recursos no administrados implementan este método y el consumidor de estas clases llama a este método en un objeto cuando ya no es necesario.

Los métodos asincrónicos se usan junto con las async palabras clave y await en C# y Visual Basic. Para obtener más información, vea El modelo de programación asincrónica de tareas en C# o programación asincrónica con Async y Await (Visual Basic).

Uso de un objeto que implementa IAsyncDisposable

Si la aplicación usa un objeto que implementa IAsyncDisposable, debe llamar a la implementación del DisposeAsync objeto cuando haya terminado de usarlo. Para asegurarse de que los recursos se liberan incluso en caso de una excepción, coloque el código que usa el IAsyncDisposable objeto en la instrucción using (en C# a partir de la versión 8.0) o llame al DisposeAsync método dentro de una finally cláusula de la try/finally instrucción . Para obtener más información sobre el try/finally patrón, vea try-finally (C#) o Try... Atrapar... Instrucción Finally (Visual Basic).

Implementación de IAsyncDisposable

Puede implementar IAsyncDisposable en las situaciones siguientes:

  • Al desarrollar un enumerador asincrónico que posee recursos no administrados. Los enumeradores asincrónicos se usan con la característica de secuencias asincrónicas de C# 8.0. Para obtener más información sobre las secuencias asincrónicas, consulte Tutorial: Generación y consumo de flujos asincrónicos mediante C# 8.0 y .NET Core 3.0.
  • Cuando su clase posee recursos no administrados y los libera requiere una operación de E/S intensiva de recursos, como vaciar el contenido de un búfer intermedio en un archivo o enviar un paquete a través de una red para cerrar una conexión.

Use el DisposeAsync método para realizar cualquier limpieza necesaria después de usar los recursos no administrados, como liberar, liberar o restablecer los recursos no administrados. Para obtener más información, consulte Implementación de un método DisposeAsync.