ZIO ZSchedule 的初始延迟
Initial delay for ZIO ZSchedule
我要制定的时间表必须:
- 在指定延迟后开始
- 以固定速率重复
- 如果达到给定的时间限制或遇到终止状态则终止
所以我有 (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
我要制定的时间表必须:
- 在指定延迟后开始
- 以固定速率重复
- 如果达到给定的时间限制或遇到终止状态则终止
所以我有 (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