Класс Channel
System.Threading.Channels.Channel
связывает
ChannelWriter
и
ChannelReader.
Без лимита -
CreateUnbounded,
с пределом -
CreateBounded.
Порядок FIFO сохраняется при
ReadAsync.
Синтаксис
using System.Threading.Channels;
Channel<int> channel = Channel.CreateUnbounded<int>();
ChannelWriter<int> writer = channel.Writer;
ChannelReader<int> reader = channel.Reader;
Пример
Давайте передадим число через канал:
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);
int res = await channel.Reader.ReadAsync();
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте проверим порядок FIFO:
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);
int first = await channel.Reader.ReadAsync();
int second = await channel.Reader.ReadAsync();
Console.WriteLine(first);
Console.WriteLine(second);
}
}
Результат выполнения кода:
1
2
Пример
Давайте закрыть запись через
Complete:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
bool res = channel.Reader.Completion.IsCompleted;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
CreateUnbounded,
канал без предела -
метод
CreateBounded,
канал с лимитом -
ChannelWriter,
сторона записи -
ChannelReader,
сторона чтения