Рассмотрим этот код, в котором кратковременное нажатие завершается. Все блоки работают одновременно (сразу же выводятся), затем спят. Большинство из них не заканчиваются, потому что программа заканчивается раньше, чем они:
my $supply = Supply.interval(0.2);
my $tap = $supply.tap: { say "1 $^a"; sleep 5; };
sleep 5;
Выход (имеет выход) имеет 25 строк (по одному для каждого тика 0,2 в 5 секунд):
1. 0
1. 1
...
1. 24
Затем я меняю это предложение на .share
:
my $supply = Supply.interval(0.2).share;
my $tap = $supply.tap: { say "1. $^a"; sleep 5 };
sleep 5;
Я вижу только одну строку ввода, но я ожидал того же выхода:
1. 1
.share
позволяет нескольким кранам получать одинаковые значения.
my $supply = Supply.interval(0.2).share;
my $tap = $supply.tap: { say "1. $^a"; sleep 5 };
my $tap2 = $supply.tap: { say "2. $^a"; };
sleep 5;
Тем не менее выход имеет выход только для первого крана и по-прежнему имеет только одну линию. Я ожидал 25 строк для каждого:
1. 1