Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación concurrente / Canales
Cerrar un canal
Cuando un productor no tiene más valores que enviar, llama a
.close sobre el canal. Cerrar señala al consumidor que el
flujo ha terminado.
La manera más cómoda de consumir un canal cerrado es
.list, que te da todos los valores restantes y acaba en
cuanto el canal está cerrado:
my $c = Channel.new;
$c.send(1);
$c.send(2);
$c.send(3);
$c.close;
say $c.list; # (1 2 3)Como .list espera a que el canal se cierre, es perfecta
para «recoge todo lo que envíe el productor». Puedes tratar el resultado
como cualquier otra lista: sumarlo, contarlo, etcétera.
my $c = Channel.new;
$c.send($_) for 1..5;
$c.close;
say [+] $c.list; # 15Cerrar es como un consumidor sabe cuándo parar. Sin ello,
.list (o un bucle de .receive) esperaría para
siempre un valor que nunca llega. Cierra siempre un canal cuando el
envío haya terminado.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Canales | Quiz — Cerrar un canal →
💪 O ve directamente a los ejercicios de esta
sección.