Объявление await using в C#
Объявление await using само вызывает DisposeAsync в конце области, в том числе если внутри произошло исключение или ожидание.
Подходит для ресурсов с асинхронным закрытием: потоки, соединения, арендованные буферы с отложенной записью.
Выполним работу внутри области и дождёмся асинхронного сброса. Сначала в консоли "work", затем "flush":
await using (LogScope scope = new LogScope())
{
Console.WriteLine("work");
}
class LogScope : IAsyncDisposable
{
public ValueTask DisposeAsync()
{
Console.WriteLine("flush");
return ValueTask.CompletedTask;
}
}
Сделайте тип, который при освобождении выводит "synced". Внутри области выведите "run".