繁体   English   中英

Scala期货的“投机执行”

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM