Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1256 of 1492 menu
◀ ▶

Класс 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

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить