Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación concurrente / Canales / Exercises / Sume un canal
Solución: Sume un canal
Aquí tienes una posible solución para la tarea.
Código
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;🦋 Puedes encontrar el código fuente en el archivo channel-sum.raku.
Salida
21Comentarios
La promesa productora envía los seis valores en un hilo y cierra el canal. La promesa consumidora, en otro hilo, usa
.listpara recoger todo hasta el cierre y devuelve la suma ([+]suma1 + 2 + … + 6).await $producer, $consumerespera ambas promesas y devuelve sus resultados en orden. El resultado del productor no hace falta aquí ($sent); el del consumidor es la suma,21. El canal es lo que lleva con seguridad los valores del hilo productor al hilo consumidor.
Navegación del curso
← Sume un canal | Vacíe un canal →