从 monix Scheduler 上执行的所有任务中收集数据

Collecting data from all tasks executed on monix Scheduler

我正在使用 Monix Scheduler 定期执行一些任务。但我不知道如何不仅执行它们,还不知道如何将它们的结果收集到某个集合中...... 假设我有一个计划任务,每次 returns 一个随机数:

val task = Task { Math.random() }
implicit val io: SchedulerService = Scheduler.io()
task.map(_ + 2).map(println).executeOn(io).delayExecution(1.seconds).loopForever.runAsyncAndForget

从理论上讲,我可以在任务执行前创建可变和并发列表,并且在task.map中我可以放一个导致该列表......但我听说使用可变的,线程之间共享的集合根本不是最佳实践......有没有什么好的方法来收集所有计划的任务结果?我应该使用什么工具以适当的 Scala 惯用方式实现此目标,避免可变集合?

使用 Monix 收集重复结果的惯用方法是使用 Observable 而不是 Task。它有许多方法,例如 zipMap 将结果与另一个 Observable 组合,还有许多方法,例如 foldLeft 将结果与相同 Observable.[=19 的先前结果组合=]

请注意,这通常需要将所有 Observables 收集到一个方法中,而不是示例中的 fire and forget 方法。理想情况下,您的整个程序中只有一个 runAsync,在您的 main 函数中。