Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Паралелно програмиране / Канали / Exercises / Сума от канал
Решение: Сума от канал
Ето едно възможно решение на задачата.
Код
my $c = Channel.new;
my $producer = start {
$c.send($_) for 1..6;
$c.close;
};
my $consumer = start {
[+] $c.list;
};
my ($sent, $sum) = await $producer, $consumer;
say $sum;🦋 Намерете програмата във файла channel-sum.raku.
Изход
21Коментари
Обещанието-производител изпраща шестте стойности в една нишка и затваря канала. Обещанието-потребител, в друга нишка, използва
.list, за да събере всичко до затварянето, и връща сумата ([+]събира1 + 2 + … + 6).await $producer, $consumerизчаква и двете обещания и връща резултатите им по ред. Резултатът на производителя тук не е нужен ($sent); резултатът на потребителя е сумата —21. Именно каналът безопасно пренася стойностите от нишката на производителя към нишката на потребителя.