Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Concurrent programmeren / Channels / Exercises / Tel een channel op
Oplossing: Tel een channel op
Hier is een mogelijke oplossing voor de taak.
Code
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;🦋 Je kunt de broncode vinden in het bestand channel-sum.raku.
Uitvoer
21Opmerkingen
De promise van de producent verstuurt de zes waarden op de ene thread en sluit het kanaal. De promise van de consument, op een andere thread, gebruikt
.listom alles tot aan de sluiting te verzamelen en geeft de som terug ([+]telt1 + 2 + … + 6op).await $producer, $consumerwacht op beide promises en geeft hun resultaten op volgorde terug. Het resultaat van de producent is hier niet nodig ($sent); dat van de consument is de som,21. Het kanaal is wat de waarden veilig van de producentthread naar de consumentthread draagt.