System.IAsyncInterface descartável

Este artigo fornece observações complementares à documentação de referência para essa 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) do síncrono. O fornecimento desse mecanismo permite que o consumidor execute operações de descarte com uso intensivo de recursos sem bloquear o thread principal de um aplicativo GUI por um longo tempo.

O IAsyncDisposable.DisposeAsync método dessa interface retorna um ValueTask que representa a operação de descarte assíncrona. As 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 async são usados em conjunto com as async palavras-chave e em C# e await Visual Basic. Para obter mais informações, consulte O modelo de programação assíncrona de tarefa em C# ou Programação assíncrona com Async e Await (Visual Basic).

Usar um objeto que implementa IAsyncDisposable

Se seu aplicativo usa um objeto que implementa IAsyncDisposable, você deve chamar a implementação do objeto quando terminar de DisposeAsync usá-lo. Para garantir que os recursos sejam liberados mesmo em caso de exceção, coloque o código que usa o objeto na instrução using (em C# a partir da versão 8.0) ou chame o IAsyncDisposableDisposeAsync método dentro de uma finally cláusula da tryfinally/instrução. Para obter mais informações sobre o try/finally padrão, consulte try-finally (C#) ou Try... Pegar... Instrução Finally ( 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 e liberá-los requer uma operação de E/S com uso intensivo de 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 método para executar qualquer DisposeAsync 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.