Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Конкурентне програмування / Канали
Закриття каналу
Коли у виробника більше немає значень для надсилання, він викликає на
каналі .close. Закриття сигналізує споживачеві, що потік
завершився.
Найзручніший спосіб спожити закритий канал — це .list,
що дає вам кожне значення, яке залишилося, і завершується, щойно канал
закрито:
my $c = Channel.new;
$c.send(1);
$c.send(2);
$c.send(3);
$c.close;
say $c.list; # (1 2 3)Оскільки .list чекає закриття каналу, він ідеальний для
«зібрати все, що надсилає виробник». Із результатом можна поводитися як
із будь-яким іншим списком — підсумувати, порахувати тощо:
my $c = Channel.new;
$c.send($_) for 1..5;
$c.close;
say [+] $c.list; # 15Закриття — це те, як споживач дізнається, коли зупинитися. Без нього
.list (або цикл із .receive) чекав би вічно на
значення, яке ніколи не прийде. Завжди закривайте канал, коли надсилання
завершено.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — Канали | Тест — Закриття каналу →
💪 Або перейдіть одразу до вправ цього розділу.