Курс по 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   |   Изчакване на завършване