什么是cats/fs2等效于ScheduledExecutiorService.scheduleWithFixedDel



我找到了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)

相关内容

  • 没有找到相关文章

最新更新