Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Реактивне програмування / react і whenever
whenever
Один блок react може містити кілька
блоків whenever, і кожен стежитиме за своїм потоком
значень. Блок реагує на той потік, що видасть значення наступним,
виконуючи відповідне тіло:
my $sum = 0;
react {
whenever Supply.from-list(1, 2, 3) {
$sum += $_;
}
whenever Supply.from-list(10, 20) {
$sum += $_;
}
}
say $sum; # 36За обома потоками стежать водночас. Їхні значення —
1, 2, 3 та 10, 20 — усі втікають у
$sum, який завершується на 36. Блок
react завершується лише тоді, коли завершаться
обидва потоки.
Кожен whenever реагує незалежно, і саме так ви поєднуєте
струмені: по одному whenever на джерело, і всі всередині
того самого react. Справжня програма могла б стежити за
мережевим з’єднанням в одному whenever і за таймером в
іншому, відгукуючись на кожен у міру надходження його подій.
У тілі whenever вам доступне видане значення (як
$_ або як іменований параметр), і робити з ним можна що
завгодно — оновити стан, видати щось в інший потік або навіть достроково
закрити блок react через done.
Практика
Виконайте 2 тести за змістом цієї теми.
Навігація курсом
← Тест — react | Тест — whenever →
💪 Або перейдіть одразу до вправ цього
розділу.