Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Paralēlā programmēšana / Kanāli / Exercises / Saskaitiet kanālu
Risinājums: Saskaitiet kanālu
Šeit ir iespējams risinājums uzdevumam.
Kods
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;🦋 Atrodiet programmu failā channel-sum.raku.
Izvade
21Komentāri
Ražotāja solījums vienā pavedienā nosūta sešas vērtības un aizver kanālu. Patērētāja solījums citā pavedienā ar
.listsavāc visu līdz aizvēršanai un atgriež summu ([+]saskaita1 + 2 + … + 6).await $producer, $consumersagaida abus solījumus un atgriež to rezultātus pēc kārtas. Ražotāja rezultāts šeit nav vajadzīgs ($sent); patērētāja rezultāts ir summa21. Tieši kanāls ir tas, kas vērtības droši pārnes no ražotāja pavediena uz patērētāja pavedienu.