介绍
调度是 Effect 中的一个重要概念,它允许你定义重复的有副作用操作。它涉及使用 Schedule 类型,这是一个不可变的值,描述了执行副作用的调度模式。
Schedule 类型的结构如下:
┌─── 调度产生的输出类型 │ ┌─── 调度消费的输入类型 │ │ ┌─── 调度的额外要求 ▼ ▼ ▼Schedule<Out, In, Requirements>调度通过消费类型为 In 的值(例如在 retry 情况下的错误,或在 repeat 情况下的值)并产生类型为 Out 的值来运行。它根据输入值和内部状态决定何时停止或继续执行。
包含 Requirements 参数允许调度根据需要利用额外的服务或资源。
调度被定义为分布在时间上的间隔集合。每个间隔代表一个窗口,在此期间副作用的重复是可能的。
在调度领域,有两个相关的概念:重试 和 重复。虽然它们共享相同的基本思想,但它们的关注点不同。重试旨在通过再次执行副作用来处理失败,而重复专注于重复执行副作用以实现期望的结果。
当使用调度进行重试或重复时,每个间隔的起始边界决定了副作用何时再次执行。例如,在重试中,如果发生错误,调度定义了何时应该重试副作用。
调度是可组合的,这意味着你可以组合简单的调度来创建更复杂的重复模式。像 Schedule.union 或 Schedule.intersect 这样的操作符允许你通过组合和修改现有调度来构建复杂的调度。这种灵活性使你能够定制调度行为以满足特定要求。