Scala 并行执行多个任务,从第一个完成的任务中选择答案
我有Scala 并行执行多个任务,从第一个完成的任务中选择答案,scala,akka,scala-2.11,Scala,Akka,Scala 2.11,我有n不同的来源,比如说,可以得到美元兑欧元的汇率。设n=3,来源为Google、Yahoo、MyRates以及相应的方法: def getYahooRate:Double = ??? def getGoogleRate:Double = ??? def getMyRate:Double = ??? 我想查询美元兑欧元的汇率,这样所有n来源都会被并行轮询,收到的第一个响应会立即返回。如果在指定的时间范围内没有回复,则引发异常 使用Scala(必要时还有Akka)实现这一点的规范方法是什么 是否
n
不同的来源,比如说,可以得到美元兑欧元的汇率。设n=3
,来源为Google、Yahoo、MyRates以及相应的方法:
def getYahooRate:Double = ???
def getGoogleRate:Double = ???
def getMyRate:Double = ???
我想查询美元兑欧元的汇率,这样所有n
来源都会被并行轮询,收到的第一个响应会立即返回。如果在指定的时间范围内没有回复,则引发异常
使用Scala(必要时还有Akka)实现这一点的规范方法是什么
是否有任何库方法可以完成大部分工作
编辑:以下是我尝试过的。请就守则提出一些意见:
这有点像来自的trycatch
的并行版本。以下方法的代码基于
您可以使用
Future.firstCompletedOf
val first = Future.firstCompletedOf(futures)
Await.result(first, timeOut.millis)
您可以使用
Future.firstCompletedOf
val first = Future.firstCompletedOf(futures)
Await.result(first, timeOut.millis)
经过一段时间的试验,这并没有达到预期的效果。与我粘贴的代码不同,如果第一个失败,它将返回失败,而不是等待成功。如果第一个失败,它将返回失败,而不是等待成功,这与我粘贴的代码不同。