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

await using

Запись await using работает с типами, реализующими IAsyncDisposable. При выходе из блока или метода вызывают DisposeAsync. Для синхронного освобождения используют using и using var. В Main здесь допустим static async Task Main.

Синтаксис

await using (var res = new Door()) { } await using var res = new Door();

Пример

Давайте освободим ресурс через await using с блоком:

using System; using System.Threading.Tasks; class Door : IAsyncDisposable { public ValueTask DisposeAsync() { Console.WriteLine("closed"); return ValueTask.CompletedTask; } } class Program { static async Task Main() { await using (var res = new Door()) { Console.WriteLine("open"); } } }

Результат выполнения кода:

"open" "closed"

Пример

Давайте применим await using var без отдельного блока:

using System; using System.Threading.Tasks; class Door : IAsyncDisposable { public ValueTask DisposeAsync() { Console.WriteLine("closed"); return ValueTask.CompletedTask; } } class Program { static async Task Main() { await using var res = new Door(); Console.WriteLine("open"); } }

Результат выполнения кода:

"open" "closed"

Пример

Давайте сохраним флаг в DisposeAsync и выведем его после блока:

using System; using System.Threading.Tasks; class Door : IAsyncDisposable { public string Last = ""; public ValueTask DisposeAsync() { Last = "closed"; return ValueTask.CompletedTask; } } class Program { static async Task Main() { Door door; await using (door = new Door()) { Console.WriteLine("open"); } Console.WriteLine(door.Last); } }

Результат выполнения кода:

"open" "closed"

Смотрите также

  • конструкция using,
    которая вызывает Dispose синхронно
  • using var,
    который освобождает в конце области
  • блок finally,
    который выполняется при любом выходе
  • блок try,
    где await using тоже освобождает ресурс
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить