Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación reactiva / await / Esperar una promesa

Quiz — await y sleep

¿Qué hace el programa siguiente?

my $p = start { sleep 2; 42 };
say 'waiting';
say await $p;
1Imprime waiting enseguida, y unos dos segundos después imprime 42
0Se detiene dos segundos y después imprime waiting y 42 juntos
0Imprime waiting y 42 enseguida: el sleep ocurre en segundo plano
0Imprime waiting y después Promise: no se puede esperar una promesa dormida

start devuelve una promesa de inmediato: el bloque, con su sleep, corre en un hilo en segundo plano. Así que say 'waiting' se ejecuta al momento. Es await quien bloquea: el programa se detiene ahí hasta que el bloque en segundo plano termina su siesta de dos segundos y produce 42, que entonces se imprime. La pausa pertenece a la línea del await, no a la del start.

Quiz — await   |   Esperar a que termine