val f: Future[Result] =
   for {
       x <- ask(actorA, Request).mapTo[Int] // call pattern directly
       s <- (actorB ask Request).mapTo[String] // call by implicit conversion
       d <- (actorC ? Request).mapTo[Double] // call by symbolic name
  } yield Result(x, s, d)

我想知道理解内的3个 future 是否同时运行。这是摘自AKKA文档的摘录。我的猜测是,当它们被翻译成嵌套的平面图/ map 时,它们是连续的。谢谢!

最佳答案

这些 future 不是同时运行的,而是一个接一个地连续运行。

这种理解首先执行ask(actorA, Request).mapTo[Int]。直到这个 future
完成后,不会理解中的下一个生成器。

仅在ask(actorA, Request).mapTo[Int]完成之后,才执行下一行(actorB ask Request).mapTo[String]

并且,一旦那个将来完成,就会对要理解的第三个表达式进行求值,然后开始第三个将来。

要使这些 future 同时运行,您必须首先启动所有三个 future ,然后才在理解中使用它们:

val fut1 = ask(actorA, Request).mapTo[Int]
val fut2 = (actorB ask Request).mapTo[String]
val fut3 = (actorB ask Request).mapTo[String]

for {
  x <- fut1
  s <- fut2
  d <- fut3
} yield Result(x, s, d)

关于scala - 用于理解的 future 的执行顺序(顺序或并发)是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24539416/

10-10 08:28