Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Concurrent programmeren / Channels
Een channel sluiten
Wanneer een producent geen waarden meer te versturen heeft, roept hij
.close op het kanaal aan. Sluiten signaleert de consument
dat de stroom geëindigd is.
De handigste manier om een gesloten kanaal te consumeren is
.list, dat je elke resterende waarde geeft en klaar is
zodra het kanaal gesloten is:
my $c = Channel.new;
$c.send(1);
$c.send(2);
$c.send(3);
$c.close;
say $c.list; # (1 2 3)Omdat .list wacht tot het kanaal gesloten is, is het
perfect voor “verzamel alles wat de producent verstuurt”. Je kunt het
resultaat als elke andere lijst behandelen — optellen, tellen,
enzovoort:
my $c = Channel.new;
$c.send($_) for 1..5;
$c.close;
say [+] $c.list; # 15Sluiten is hoe een consument weet wanneer hij moet stoppen. Zonder
dat zou .list (of een lus van .receive) eeuwig
wachten op een waarde die nooit komt. Sluit een kanaal altijd zodra het
versturen klaar is.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — Channels | Quiz — Een channel sluiten →
💪 Of ga direct naar de oefeningen in deze
sectie.