[英]“Speculative execution” of Scala Futures
我想做一些创建两个Future的操作,使用在一个代码路径中首先返回的那个,然后将“ slow” Future发送到另一个代码路径。
一个用例是,例如,我可以选择调用“变速”和“可靠”的两个外部端点之一。 来自任何一个的数据都很好,因此我宁愿将两者都调用,并使用“以先到者为准”和(也许还可以对另一个输出执行某些操作)。
我总是可以只检查期货是否准备就绪,但是有什么比循环调用Await.ready
更干净的方法呢? (人们怎么称呼这种模式?)
这只是:
Future.firstCompletedOf(List(f1, f2)).map(first => ...)
//or `foreach`/`Await` if you can't interact with Future-ready IO
这是scaladocs 。
您可以创建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)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.