对序列中的供应做出反应

Fer*_*ata 6 sequence perl6

我不明白为什么该程序有效:

my $supply = Supply.interval: 1;

react {
  whenever $supply       { put "Got $^a"  }
  whenever Promise.in(5) { put 'Timeout!'; done }
}

END put 'Ending…'
Run Code Online (Sandbox Code Playgroud)

打印此:

Got 0
Got 1
Got 2
Got 3
Got 4
Timeout!
Ending…
Run Code Online (Sandbox Code Playgroud)

并正确退出,而这一步:

my $supply = (1, 1, * + * … ?).Supply;

react {
  whenever $supply       { put "Got $^a"; sleep 1 }
  whenever Promise.in(5) { put 'Timeout!'; done }
}

END put 'Ending…'
Run Code Online (Sandbox Code Playgroud)

版画

Got 1
Got 1
Got 2
Got 3
Got 5
Timeout!
Run Code Online (Sandbox Code Playgroud)

但随后挂起,不输出“ Ending…”;在这种情况下,“完成”不够吗?

如果我将“完成”替换为“退出”,则程序可以正常工作并退出。