ReadAllAsync в C#
Метод ReadAllAsync даёт асинхронное перечисление канала. Цикл await foreach идёт, пока писатель не закроет канал и буфер не опустеет.
Без закрытия канала цикл не закончится: он будет ждать следующий элемент.
Запишем 1 и 2, закроем канал и прочитаем все элементы. В консоли две строки, 1 и 2, в порядке записи:
using System.Threading.Channels;
Channel<int> ch = Channel.CreateUnbounded<int>();
await ch.Writer.WriteAsync(1);
await ch.Writer.WriteAsync(2);
ch.Writer.Complete();
await foreach (int v in ch.Reader.ReadAllAsync())
{
Console.WriteLine(v); // выведет 1, 2
}
Запишите в канал числа 8 и 5, закройте запись и прочитайте все элементы. Выведите их сумму.