Я не могу понять, почему эта программа работает:
my $supply = Supply.interval: 1;
react {
whenever $supply { put "Got $^a" }
whenever Promise.in(5) { put 'Timeout!'; done }
}
END put 'Ending…'
печать это:
Got 0
Got 1
Got 2
Got 3
Got 4
Timeout!
Ending…
и правильно выходит, а вот этот:
my $supply = (1, 1, * + * … ∞).Supply;
react {
whenever $supply { put "Got $^a"; sleep 1 }
whenever Promise.in(5) { put 'Timeout!'; done }
}
END put 'Ending…'
печать
Got 1
Got 1
Got 2
Got 3
Got 5
Timeout!
но затем он зависает и не выводит "Завершение ..."; разве «сделано» не достаточно в этом случае?
Если я заменю «done» на «exit», программа будет работать нормально и завершится.