Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / await / Ожидание промиса

Тест — await и sleep

Что делает следующая программа?

my $p = start { sleep 2; 42 };
say 'waiting';
say await $p;
1Сразу печатает waiting, а примерно через две секунды печатает 42
0Делает паузу в две секунды, затем печатает waiting и 42 вместе
0Сразу печатает waiting и 42 — sleep происходит в фоне
0Печатает waiting, затем Promise — спящий промис дождаться нельзя

start возвращает промис немедленно: блок вместе со своим sleep выполняется в фоновом потоке. Поэтому say 'waiting' срабатывает сразу же. Блокирует выполнение именно await: программа приостанавливается на нём, пока фоновый блок не досмотрит свой двухсекундный сон и не выдаст 42, которое затем печатается. Пауза принадлежит строке с await, а не строке со start.

Навигация по курсу

Тест — await   |   Ожидание завершения