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; # 15

Sluiten 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.