从 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
函数中。
我正在使用 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
函数中。