ZIO ZSschedule 的初始延迟



我试图制定的时间表必须:

  1. 在指定的延迟后启动
  2. 以固定速率重复
  3. 如果达到给定的时间限制或遇到终止状态,则终止

所以我有的是(2.)和(3.):

val repeatUntilTimeLimitReached =
ZSchedule
.fixed(config.pollingConfig.pollInterval)
.untilOutput(pollingTimeLimitReached)
val untilTermination = Schedule.doUntil[RebootState](_.terminatesPolling)
val schedule = repeatUntilTimeLimitReached *> untilTermination                                           

我尝试了ZSchedule.delayed(),但它似乎也增加了后续时间表的延迟。

那么有没有办法将初始延迟添加到ZSchedule

在与社区进行了一次小型讨论后,似乎使用Schedule(ZIO 版本:1.0.0-RC15)无法实现预期的行为,因为它用于在第一次执行后重复。

我最终使用了我在原始帖子中所做的ZIO.sleep()schedule

val schedule = repeatUntilTimeLimitReached *> untilTermination       
for {
_     <- ZIO.sleep(initialDelay)
state <- doStuff().repeat(schedule)
} yield state

为什么不添加另一个时间表并编写它们:

val delayedSchedule = Schedule.once.delayed(_ + 12.seconds)
val schedule = delayedSchedule *> repeatUntilTimeLimitReached *> untilTermination    

我玩了一下这个,你需要flatMap时间表

在这里,我使用一个使用zio.console的示例:

import zio.console._
import zio.duration._
import zio.{App, Schedule, ZIO}
val s = Schedule.spaced(1.second)
for {
_ <- putStrLn("Start")
_ <- putStrLn("Initial Delay").delay(5.seconds)
_ <- putStrLn("Repeated Delay").repeat(s)
} yield ()

相关内容

  • 没有找到相关文章

最新更新