gpt4 book ai didi

sequence - 对来自序列的供应使用react

转载 作者:行者123 更新时间:2023-12-04 15:17:25 35 4
gpt4 key购买 nike

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

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!

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

如果我用“退出”替换“完成”,程序运行良好并退出。

最佳答案

这只是一个猜测:

一个 donewhenever块信号表明该供应whenever已经完成了。那时 react已准备好整体完成,但它首先让其他供应品完成他们等待的任何事情,如果有的话。

首先,第一个whenever的供应 ( $supply ) 每秒发出另一个值。当 Promise.in(5) 时它不会准备好供应是done .那么整体react已经完成了。

在第二个实例中,第一个 whenever的供应 ( $supply ) 立即发出另一个值。然后是另一个。它从来没有准备好。所以整体react永远不会完成。相反,react一直在寻找第一个 whenever准备好了 cue s 另一个块,然后重复无数次,这些块永远不会真正运行并执行它们的 put因为系统忙于产生无数线程。

关于sequence - 对来自序列的供应使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089250/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com