Поделиться через


Интерфейс System.IAsyncDisposable

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

В .NET классы, принадлежащие неуправляемым ресурсам, обычно реализуют IDisposable интерфейс для обеспечения механизма освобождения неуправляемых ресурсов синхронно. Однако в некоторых случаях им необходимо предоставить асинхронный механизм для освобождения неуправляемых ресурсов в дополнение к синхронному (или вместо него). Предоставление такого механизма позволяет потребителю выполнять ресурсоемкие операции удаления без блокировки основного потока приложения ГРАФИЧЕСКОго интерфейса в течение длительного времени.

Метод IAsyncDisposable.DisposeAsync этого интерфейса возвращает асинхронную ValueTask операцию удаления. Классы, принадлежащие неуправляемым ресурсам, реализуют этот метод, и потребитель этих классов вызывает этот метод для объекта, если он больше не нужен.

Асинхронные методы используются в сочетании с async ключевое слово await в C# и Visual Basic. Дополнительные сведения см. в статье "Асинхронное программирование задачи" в C# или асинхронном программировании с помощью Async и Await (Visual Basic).

Использование объекта, реализующего IAsyncDisposable

Если приложение использует объект, реализующий IAsyncDisposableего, следует вызвать реализацию объекта DisposeAsync после завершения его использования. Чтобы убедиться, что ресурсы выпускаются даже в случае исключения, поместите код, который использует IAsyncDisposable объект в инструкцию using (в C# начиная с версии 8.0) или вызовите DisposeAsync метод внутри finally предложения инструкцииtry/finally. Дополнительные сведения о шаблоне try/finally см. в статье try-finally (C#) или Try... Поймать... Оператор Finally (Visual Basic).

Реализация IAsyncDisposable

Вы можете реализовать IAsyncDisposable в следующих ситуациях:

  • При разработке асинхронного перечислителя, которому принадлежат неуправляемые ресурсы. Асинхронные перечислители используются с функцией асинхронных потоков C# 8.0. Дополнительные сведения об асинхронных потоках см. в руководстве . Создание и использование асинхронных потоков с помощью C# 8.0 и .NET Core 3.0.
  • Если класс владеет неуправляемыми ресурсами и освобождает их, требует операции ввода-вывода с интенсивным ресурсом, например очистка содержимого промежуточного буфера в файл или отправка пакета через сеть для закрытия подключения.

DisposeAsync Используйте метод для выполнения любой очистки, необходимой после использования неуправляемых ресурсов, таких как освобождение, освобождение или сброс неуправляемых ресурсов. Дополнительные сведения см. в разделе "Реализация метода DisposeAsync".