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

21

Kommentare

  1. Das Erzeuger-Promise sendet die sechs Werte auf einem Thread und schließt den Kanal. Das Verbraucher-Promise auf einem anderen Thread sammelt mit .list alles bis zum Schließen und liefert die Summe ([+] addiert 1 + 2 + … + 6).

  2. await $producer, $consumer wartet 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.

Kursnavigation

Summieren Sie einen Channel   |   Leeren Sie einen Channel