System.IAsyncInterface descartável

Observação

Este artigo fornece observações complementares à documentação de referência para esta API.

No .NET, as classes que possuem recursos não gerenciados geralmente implementam a IDisposable interface para fornecer um mecanismo para liberar recursos não gerenciados de forma síncrona. No entanto, em alguns casos, eles precisam fornecer um mecanismo assíncrono para liberar recursos não gerenciados, além (ou em vez de) o síncrono. O fornecimento desse mecanismo permite que o consumidor execute operações de descarte que exigem muitos recursos sem bloquear a tarefa principal de uma aplicação de interface gráfica por um longo tempo.

O IAsyncDisposable.DisposeAsync método desta interface retorna um ValueTask que representa a operação de descarte assíncrono. Classes que possuem recursos não gerenciados implementam esse método, e o consumidor dessas classes chama esse método em um objeto quando ele não é mais necessário.

Os métodos assíncronos são usados em conjunto com as async palavras-chave e await em C# e Visual Basic. Para obter mais informações, consulte O modelo de programação assíncrona de tarefas em C# ou Programação assíncrona com Async e Await (Visual Basic).

Usar um objeto que implementa IAsyncDisposable

Se a sua aplicação utiliza um objeto que implementa IAsyncDisposable, deverá chamar a implementação do objeto quando terminar de usá-lo. Para garantir que os recursos sejam liberados mesmo em caso de exceção, coloque o código que usa o IAsyncDisposable objeto na instrução using (em C# a partir da versão 8.0) ou chame o DisposeAsync método dentro de uma finally cláusula da try/finally instrução. Para obter mais informações sobre o try/finally padrão, consulte try-finally (C#) ou Try...Catch...Finally Statement (Visual Basic).

Implementar IAsyncDisposable

Você pode implementar IAsyncDisposable nas seguintes situações:

  • Ao desenvolver um enumerador assíncrono que possui recursos não gerenciados. Os enumeradores assíncronos são usados com o recurso de fluxos assíncronos do C# 8.0. Para obter mais informações sobre fluxos assíncronos, consulte Tutorial: Gerar e consumir fluxos assíncronos usando C# 8.0 e .NET Core 3.0.
  • Quando sua classe possui recursos não gerenciados, liberá-los requer uma operação de E/S que consome muitos recursos, como liberar o conteúdo de um buffer intermediário em um arquivo ou enviar um pacote por uma rede para fechar uma conexão.

Use o DisposeAsync método para executar qualquer limpeza necessária depois de usar os recursos não gerenciados, como liberar, liberar ou redefinir os recursos não gerenciados. Para obter mais informações, consulte Implementar um método DisposeAsync.