2

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

  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吗?

4

2 回答 2

2

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

我最终使用ZIO.sleep()schedule在原始帖子中制作:

val schedule = repeatUntilTimeLimitReached *> untilTermination       

for {
  _     <- ZIO.sleep(initialDelay)
  state <- doStuff().repeat(schedule)
} yield state
于 2019-10-23T09:17:15.323 回答
1

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

val delayedSchedule = Schedule.once.delayed(_ + 12.seconds)

val schedule = delayedSchedule *> repeatUntilTimeLimitReached *> untilTermination    

flatMap我玩了一下这个,你需要Schedules

在这里,我使用了一个示例,该示例使用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 ()
于 2019-10-23T08:08:03.993 回答