【问题标题】:Collecting data from all tasks executed on monix Scheduler从 monix Scheduler 上执行的所有任务中收集数据
【发布时间】:2019-08-07 15:05:46
【问题描述】:

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

【问题讨论】:

    标签: scala scala-cats monix cats-effect


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-07
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 2019-11-02
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多