Класс ChannelReader
ChannelReader<T> берут из
Channel.
Ожидание элемента -
ReadAsync,
мгновенная попытка -
TryRead.
Конец канала -
Completion.
Синтаксис
ChannelReader<int> reader = channel.Reader;
int value = await reader.ReadAsync();
Пример
Давайте прочитать записанное число:
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(12345);
ChannelReader<int> reader = channel.Reader;
int res = await reader.ReadAsync();
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте прочитать два элемента по порядку:
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);
Console.WriteLine(await channel.Reader.ReadAsync());
Console.WriteLine(await channel.Reader.ReadAsync());
}
}
Результат выполнения кода:
1
2
Пример
Давайте попробовать TryRead из
пустого канала:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
bool res = channel.Reader.TryRead(out _);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
ChannelWriter,
сторона записи -
метод
ReadAllAsync,
прочитать всё -
метод
CreateUnbounded,
создание канала -
Channel,
общая очередь