Complete на ChannelWriter в C#
Метод Complete закрывает канал для новых записей. Элементы, которые уже лежат в буфере, ещё можно прочитать.
Когда буфер пуст и канал закрыт, ReadAsync бросает ChannelClosedException. В примере число ещё лежит в канале, поэтому первое чтение его возвращает. Затем WaitToReadAsync даёт False, элементов больше нет:
using System.Threading.Channels;
Channel<int> ch = Channel.CreateUnbounded<int>();
await ch.Writer.WriteAsync(2);
ch.Writer.Complete();
Console.WriteLine(await ch.Reader.ReadAsync()); // выведет 2
Console.WriteLine(await ch.Reader.WaitToReadAsync()); // выведет False
Запишите в канал число 6, закройте его для новых записей и прочитайте это число. Затем выведите, остались ли в канале ещё элементы.