我想做一些像创建两个Futures的东西,在一个代码路径中使用先返回的那个并发送" slow"未来沿着不同的代码路径。
用例例如是我可以选择调用两个外部端点中的一个,它们是变速"变速"和#34;老可靠"。来自任何一个的数据都很好,所以我宁愿调用两个并使用"无论哪个先来" (也许还可以对其他输出做些什么)。
我总是可以检查期货是否准备就绪,但是有什么比只是在循环中调用Await.ready
? (人们怎么称呼这种模式?)
答案 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)
}