Compartilhar via


Interface System.IAsyncDisposable

Este artigo fornece comentários complementares à documentação de referência para esta API.

No .NET, 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. Fornecer esse mecanismo permite que o consumidor execute as operações de descarte com uso intensivo de recursos sem bloquear o thread principal de um aplicativo de GUI por muito tempo.

O método IAsyncDisposable.DisposeAsync dessa interface retorna um ValueTask que representa a operação de descarte assíncrona. 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 palavras-chave async e await no C# e no 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 o aplicativo usa um objeto que implementa IAsyncDisposable, você deve chamar a implementação do DisposeAsync 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 padrão try/finally, consulte try-finally (C#) ou Try... Catch... 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. 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 o C# 8.0 e o .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 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.