Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Канали | Тест — Затваряне на канал →
💪 Или преминете направо към упражненията в този
раздел.