如何解决什么是猫 / fs2 相当于 ScheduledExecutorService.scheduleWithFixedDelay
我发现 fs2-cron 但它与调用具有固定延迟间隔的任务不同。如果此功能在cats/fs2 中可用,请提供代码示例。我确实看过猫定时器,但不知道如何间隔重复任务。
一种方法如下,但我认为添加 Thread.sleep 不是正确的方法。
Stream.eval(IO {
println("BEING RUN!!");
Thread.sleep(5000)
})
.repeat
.compile
.drain
.as(ExitCode.Success)
谢谢 萨德。
解决方法
使用 Thread.sleep
不是引入延迟的最佳方式,因为它会阻塞线程 5 秒。
通常,更好的替代方法是使用 IO.sleep
,它不会阻塞线程,只是在给定的时间段内“挂起”任务,然后重新安排它。
Stream.eval(
for {
_ <- IO(println("BEING RUN!!"))
_ <- IO.sleep(5.seconds)
} yield ()
).repeat
.compile
.drain
.as(ExitCode.Success)
更好的是,您可以使用 fs2
内置函数 awakeEvery
以固定间隔从流中发出单个元素,然后对流的每个元素执行效果。
Stream.awakeEvery[IO](5.seconds)
.evalMap(_ => IO(println("BEING RUN!!")))
.compile
.drain
.as(ExitCode.Success)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。