Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Канали   |   Тест — Затваряне на канал


💪 Или преминете направо към упражненията в този раздел.