Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Samtempa programado / Kanaloj / Exercises / Sumu kanalon
Solvo: Sumu kanalon
Jen ebla solvo de la tasko.
Kodo
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;🦋 Vi povas trovi la fontkodon en la dosiero channel-sum.raku.
Eligo
21Komentoj
La produktanta promeso sendas la ses valorojn sur unu fadeno kaj fermas la kanalon. La konsumanta promeso, sur alia fadeno, uzas
.listpor kolekti ĉion ĝis la fermo kaj redonas la sumon ([+]adicias1 + 2 + … + 6).await $producer, $consumeratendas ambaŭ promesojn kaj redonas iliajn rezultojn laŭvice. La rezulto de la produktanto ne estas bezonata ĉi tie ($sent); tiu de la konsumanto estas la sumo,21. La kanalo estas tio, kio sekure portas la valorojn de la produktanta fadeno al la konsumanta fadeno.