"投机执行"斯卡拉期货

时间:2018-02-24 16:27:29

标签: scala future

我想做一些像创建两个Futures的东西,在一个代码路径中使用先返回的那个并发送" slow"未来沿着不同的代码路径。

用例例如是我可以选择调用两个外部端点中的一个,它们是变速"变速"和#34;老可靠"。来自任何一个的数据都很好,所以我宁愿调用两个并使用"无论哪个先来" (也许还可以对其他输出做些什么)。

我总是可以检查期货是否准备就绪,但是有什么比只是在循环中调用Await.ready? (人们怎么称呼这种模式?)

2 个答案:

答案 0 :(得分:3)

这只是:

Future.firstCompletedOf(List(f1, f2)).map(first => ...) 
//or `foreach`/`Await` if you can't interact with Future-ready IO

以下是scaladocs

答案 1 :(得分:1)

您可以创建Promise并通过Futures完成此操作。

import scala.concurrent.{Future, Promise}
import scala.util.Random
import scala.concurrent.ExecutionContext.Implicits.global

val p = Promise[String]

Future {
  Thread.sleep(Random.nextInt(10000))
  "1"
}.onComplete(p.complete)

Future {
  Thread.sleep(Random.nextInt(10000))
  "2"
}.onComplete(p.complete)


p.future.foreach {res =>
  println(res)
}