gpt4 book ai didi

raku - 每秒打印一次,并且在 Perl 6 中使用 react 时每 5 秒 sleep 10 秒?

转载 作者:行者123 更新时间:2023-12-04 00:08:26 25 4
gpt4 key购买 nike

我想每秒打印一次当前时间,还想每 5 秒睡 10 秒:

react {
whenever Supply.interval(1) {
say DateTime.now.posix;
}

whenever Supply.interval(5) {
sleep 10;
say 'Sleep Done';
}

whenever signal(SIGINT) {
say "Done.";
done;
}
}

输出不是我想要的:
1542371045
Sleep Done
1542371055
Sleep Done
1542371065
Sleep Done
1542371075
Done.
...

我想要的是这个:
1542371045
1542371046
1542371047
1542371048
1542371049
Sleep Done
1542371059
1542371060
1542371061
1542371062
1542371063
Sleep Done
Done.

不太了解 Promise , Supply ……关于乐,这可能吗?

最佳答案

完全取决于还需要什么,我可能会这样写:

react {
sub sequence() {
whenever Supply.interval(1).head(5) {
say DateTime.now.posix;
LAST whenever Promise.in(10) {
say "Sleep done";
sequence();
}
}
}
sequence();
}

这给出了这样的输出:
1542395158
1542395159
1542395160
1542395161
1542395162
Sleep done
1542395172
1542395173
1542395174
1542395175
1542395176
Sleep done
1542395186
1542395187
1542395188
...

这将绝对确保您在 10 秒暂停之间获得 5 滴答声;使用两个单独的间隔供应来做它 - 就像这里的许多解决方案一样 - 不会对此提供任何严格的保证,并且可能会时不时地错过一个滴答声。 (没有的就是带有 rotor 的可爱的,如果您不需要实际打印“ sleep 完成”的话,这是一个不错的选择)。它也没有状态(变量)和条件,这是相当不错的。

虽然这看起来可能是递归的,因为 whenever是一个异步循环结构,它实际上根本不会建立调用堆栈。

它也是完全由异步结构构建的,因此在 Perl 6.d 中不会 - 如果 react在线程池上触发 - 阻止真正的 OS 线程。所以你可以有成千上万的这些事件。相比之下, sleep会阻塞一个真正的线程,这就是 sleep传统上应该这样做,但如果以其他方式处理异步构造,则不太合适。

关于raku - 每秒打印一次,并且在 Perl 6 中使用 react 时每 5 秒 sleep 10 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331761/

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