Курс 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.