0

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

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 惯用方式实现这一目标,避免可变集合?

4

1 回答 1

3

使用 Monix 收集重复结果的惯用方法是使用Observable而不是Task. 它有许多方法,例如zipMap将结果与另一个结果相结合Observable,以及许多方法,例如foldLeft将结果与以前的结果相结合Observable

请注意,这通常需要将所有内容收集Observables到一种方法中,而不是示例中的即发即弃方法。runAsync理想情况下,您的整个程序中,您的main函数中恰好有一个。

于 2019-08-07T16:56:01.817 回答