【发布时间】:2015-03-25 04:05:15
【问题描述】:
所以,我阅读了关于并行理解的文章here。他给出了以下代码示例:
// Make 3 parallel async calls
val fooFuture = WS.url("http://foo.com").get()
val barFuture = WS.url("http://bar.com").get()
val bazFuture = WS.url("http://baz.com").get()
for {
foo <- fooFuture
bar <- barFuture
baz <- bazFuture
} yield {
// Build a Result using foo, bar, and baz
Ok(...)
}
到目前为止一切都很好,但是,我不知道我需要始终执行多少个 WS.get(),我希望它是动态的。比如:
val checks = Seq(callOne(param), callTwo(param))
电话在哪里:
def callOne(param: String): Future[Boolean] = {
// do something and return the Future with a true/false value
Future(true)
}
def callTwo(param: String): Future[Boolean] = {
// do something and return the Future with a true/false value
Future(false)
}
所以,我的问题是,我应该如何对我的序列结果与 WS 调用(或与此相关的数据库查询)做出反应?
我给出了两个调用示例,但我希望相同的代码能够并行处理 1 到多个调用,并在 for-yield 中收集结果以最终继续执行其他操作。
重要提示:所有调用都应该并行执行,最快的将在慢的之前完成,而不考虑它们被触发的顺序。
【问题讨论】:
标签: scala concurrency playframework-2.0