ZIO ZSchedule 的初始延迟

Initial delay for ZIO ZSchedule

我要制定的时间表必须:

  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 的初始延迟吗?

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

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 ()

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

我最终使用了 ZIO.sleep()schedule 我在原来的 post:

val schedule = repeatUntilTimeLimitReached *> untilTermination       

for {
  _     <- ZIO.sleep(initialDelay)
  state <- doStuff().repeat(schedule)
} yield state