Метод ReadAsync
ChannelReader.ReadAsync соблюдает
FIFO. На пустом закрытом канале
бросает ChannelClosedException.
Без ожидания -
TryRead.
Запись -
WriteAsync.
Синтаксис
int value = await reader.ReadAsync();
Пример
Давайте снять 1, затем 2:
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
Пример
Давайте прочитать после
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);
channel.Writer.Complete();
int res = await channel.Reader.ReadAsync();
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте поймать закрытие на пустом канале:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
try
{
await channel.Reader.ReadAsync();
}
catch (ChannelClosedException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
метод
TryRead,
чтение без ожидания -
метод
ReadAllAsync,
цикл до закрытия -
ChannelReader,
класс, где объявлен метод -
ChannelWriter,
парная запись