Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / await / Exercises / Дождитесь промиса
Решение: Дождитесь промиса
Вот один из возможных вариантов решения задачи.
Код
my @jobs =
(start { sleep 0.3; 'slow' }),
(start { sleep 0.1; 'quick' }),
(start { sleep 0.2; 'medium' });
say await @jobs;🦋 Исходный код можно найти в файле await-a-promise.raku.
Вывод
(slow quick medium)Комментарии
Все три задачи стартуют одновременно и спят конкурентно, поэтому вся программа занимает около
0.3секунды — длительность самой медленной задачи, а не сумму всех трёх.Хотя
quickзаканчивается первой, аslowпоследней, вывод —(slow quick medium):awaitвозвращает каждый результат на той же позиции, что и его промис в@jobs. Порядок завершения влияет только на то, когдаawaitвернёт управление, но никогда — на расположение результатов.