Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Реактивне програмування / await / Очікування промиса

Тест — await і sleep

Що робить наступна програма?

my $p = start { sleep 2; 42 };
say 'waiting';
say await $p;
1Одразу друкує waiting, а приблизно за дві секунди друкує 42
0Робить паузу на дві секунди, а потім друкує waiting та 42 разом
0Друкує waiting та 42 одразу — сон відбувається у фоні
0Друкує waiting, а потім Promise — обіцянку, що спить, чекати не можна

start повертає обіцянку негайно — блок разом зі своїм sleep виконується у фоновому потоці. Тож say 'waiting' виконується одразу. Блокує саме await: програма зупиняється там, аж поки фоновий блок не завершить свою двосекундну дрімоту й не дасть 42, яке потім друкується. Пауза належить рядкові з await, а не рядкові зі start.

Навігація курсом

Тест — await   |   Очікування завершення