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

21

Komentāri

  1. 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 .list savāc visu līdz aizvēršanai un atgriež summu ([+] saskaita 1 + 2 + … + 6).

  2. await $producer, $consumer sagaida 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 summa 21. 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.

Kursa navigācija

Saskaitiet kanālu   |   Iztukšojiet kanālu