Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Nebenläufige Programmierung / Channels / Exercises / Summieren Sie einen Channel
Lösung: Summieren Sie einen Channel
Hier ist eine mögliche Lösung der Aufgabe.
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;🦋 Du findest den Quellcode in der Datei channel-sum.raku.
Ausgabe
21Kommentare
Das Erzeuger-Promise sendet die sechs Werte auf einem Thread und schließt den Kanal. Das Verbraucher-Promise auf einem anderen Thread sammelt mit
.listalles bis zum Schließen und liefert die Summe ([+]addiert1 + 2 + … + 6).await $producer, $consumerwartet auf beide Promises und liefert ihre Ergebnisse in Reihenfolge. Das Ergebnis des Erzeugers wird hier nicht gebraucht ($sent); das des Verbrauchers ist die Summe,21. Der Kanal ist es, der die Werte sicher vom Erzeuger-Thread zum Verbraucher-Thread trägt.