Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpAsId 352 of 509 menu
◀ ▶

IAsyncDisposable в C#

Интерфейс IAsyncDisposable освобождает ресурсы асинхронно. Вместо блокирующего Dispose вызывают DisposeAsync: он может подождать диск или сеть и не держать поток.

Конструкция await using компилируется в try/finally с await DisposeAsync() при выходе из области видимости.

Закроем фиктивный канал асинхронно. Сначала в консоли "work", затем "closed": освобождение идёт после блока await using. Обычный using не дождался бы асинхронного закрытия:

await using Gate gate = new Gate(); Console.WriteLine("work"); class Gate : IAsyncDisposable { public async ValueTask DisposeAsync() { await Task.Delay(1); Console.WriteLine("closed"); } }

Сделайте тип, который при асинхронном освобождении выводит "released". В области видимости выведите "open".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить