【发布时间】:2018-09-22 09:17:07
【问题描述】:
我有一种情况,我需要并行运行一堆操作。
所有操作都有相同的返回值(比如Seq[String])。
可能某些操作可能失败,而其他操作成功返回结果。
我想返回成功的结果以及发生的任何异常,以便记录它们以进行调试。
在我去编写自己的类之前,是否有内置方法或通过任何库(cats/scalaz)的简单方法来执行此操作?
我正在考虑在自己的未来执行每个操作,然后检查每个未来,并返回一个 Seq[String] -> Seq[Throwable] 的元组,其中左值是成功的结果(展平/组合),右是发生的任何异常的列表.
有没有更好的办法?
【问题讨论】:
-
致OP:您接受的解决方案不正确,它不会等待计算结果。如果此代码运行时您的未来未完成,您将永远看到结果。您要么必须等到它完成,要么像我建议的那样注册一个异步回调。
-
在检查结果之前已经在使用 Future.await。谢谢。
-
我在文档中看不到这个方法 (scala-lang.org/api/2.12.3/scala/concurrent/Future.html)。那是隐式转换吗?我实际上从未使用过 Scala 期货,而且文档中似乎没有与 Java 的
Future.get相当的东西 -
意思是等待。准备好了,对不起
标签: scala concurrency parallel-processing scalaz scala-cats