Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione concorrente / Channel
Chiudere un channel
Quando un produttore non ha più valori da inviare, chiama
.close sul channel. La chiusura segnala al consumatore che
il flusso è finito.
Il modo più comodo di consumare un channel chiuso è
.list, che ti dà ogni valore rimasto e finisce una volta
che il channel è chiuso:
my $c = Channel.new;
$c.send(1);
$c.send(2);
$c.send(3);
$c.close;
say $c.list; # (1 2 3)Poiché .list aspetta che il channel sia chiuso, è
perfetto per «raccogli tutto ciò che il produttore invia». Puoi trattare
il risultato come qualunque altro elenco — sommarlo, contarlo e così
via:
my $c = Channel.new;
$c.send($_) for 1..5;
$c.close;
say [+] $c.list; # 15La chiusura è il modo in cui un consumatore sa quando fermarsi. Senza
di essa, .list (o un ciclo di .receive)
aspetterebbe per sempre un valore che non arriva mai. Chiudi sempre un
channel quando l’invio è finito.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Channel | Quiz — Chiudere un channel →
💪 Oppure vai direttamente agli esercizi di questa
sezione.