Метод ReadAllAsync
ChannelReader.ReadAllAsync
работает с await foreach, пока
писатель не вызвал
Complete
и очередь не опустела. Один элемент -
через
ReadAsync.
Синтаксис
await foreach (int item in reader.ReadAllAsync())
{
}
Пример
Давайте суммировать 1 и
2 после Complete:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
await channel.Writer.WriteAsync(1);
await channel.Writer.WriteAsync(2);
channel.Writer.Complete();
int sum = 0;
await foreach (int item in channel.Reader.ReadAllAsync())
{
sum += item;
}
Console.WriteLine(sum);
}
}
Результат выполнения кода:
3
Пример
Давайте посчитать элементы:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
await channel.Writer.WriteAsync(1);
await channel.Writer.WriteAsync(2);
channel.Writer.Complete();
int count = 0;
await foreach (int _ in channel.Reader.ReadAllAsync())
{
count++;
}
Console.WriteLine(count);
}
}
Результат выполнения кода:
2
Пример
Давайте прочитать пустой закрытый канал:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
int sum = 0;
await foreach (int item in channel.Reader.ReadAllAsync())
{
sum += item;
}
Console.WriteLine(sum);
}
}
Результат выполнения кода:
0
Смотрите также
-
метод
ReadAsync,
один элемент за раз -
метод
Complete,
завершить запись -
свойство
Completion,
задача конца чтения -
ChannelReader,
класс, где объявлен метод