Курс языка программирования 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)

Комментарии

  1. Все три задачи стартуют одновременно и спят конкурентно, поэтому вся программа занимает около 0.3 секунды — длительность самой медленной задачи, а не сумму всех трёх.

  2. Хотя quick заканчивается первой, а slow последней, вывод — (slow quick medium): await возвращает каждый результат на той же позиции, что и его промис в @jobs. Порядок завершения влияет только на то, когда await вернёт управление, но никогда — на расположение результатов.

Навигация по курсу

Дождитесь промиса   |   Дождитесь supply