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

Bounded канал в C#

Метод Channel.CreateBounded задаёт максимальную ёмкость очереди. WriteAsync ждёт, пока читатель не освободит место, если буфер полон - так производитель не обгоняет потребителя без ограничений.

Пока мест в буфере нет, писатель ждёт читателя. В примере особый режим переполнения не задаётся: запись просто ждёт свободный слот. Результат записи проверяют один раз до ожидания. После await этот статус уже забран, повторно читать его нельзя.

Ёмкость 2: две записи проходят сразу, третья ещё не завершена, пока буфер полон. Первая строка в консоли - 1, это признак незавершённой записи. Затем читают 1 и 2:

using System.Threading.Channels; Channel<int> ch = Channel.CreateBounded<int>(2); await ch.Writer.WriteAsync(1); await ch.Writer.WriteAsync(2); ValueTask writeThird = ch.Writer.WriteAsync(3); Console.WriteLine(writeThird.IsCompleted ? 0 : 1); // выведет 1 Console.WriteLine(await ch.Reader.ReadAsync()); // выведет 1 await writeThird; Console.WriteLine(await ch.Reader.ReadAsync()); // выведет 2

Создайте канал целых чисел ёмкостью 1. Запишите число 4, затем начните запись числа 8 и не ждите её. Выведите 1, если вторая запись ещё не завершилась. Потом прочитайте первое число и дождитесь второй записи.

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