Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Reaktīvā programmēšana / await / Solījuma gaidīšana
Viktorīna — await un sleep
Ko dara šī programma?
my $p = start { sleep 2; 42 };
say 'waiting';
say await $p;| 1 | Uzreiz izdrukā waiting, tad apmēram divas sekundes vēlāk izdrukā 42 |
| 0 | Apstājas uz divām sekundēm, tad izdrukā waiting un 42 kopā |
| 0 | Izdrukā waiting un 42 uzreiz — miegs notiek fonā |
| 0 | Izdrukā waiting, tad Promise — guļošu solījumu gaidīt nevar |
start atgriež solījumu tūlīt — bloks ar
savu sleep izpildās fona pavedienā. Tāpēc
say 'waiting' nostrādā uzreiz. Bloķē tieši
await: programma tur apstājas, līdz fona bloks pabeidz savu
divu sekunžu snaudu un rada 42, ko tad izdrukā. Pauze
pieder await rindai, nevis start rindai.