gpt4 book ai didi

scala - for comprehension 里面的 future 的执行顺序(顺序还是并发)是什么?

转载 作者:行者123 更新时间:2023-12-04 18:07:19 24 4
gpt4 key购买 nike

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)

我想知道 for-comprehension 中的 3 个 future 是否同时运行。这是从 AKKA 文档中提取的片段。我的猜测是它们被翻译成嵌套的平面图/ map 时是连续的。谢谢!

最佳答案

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

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

只有在 ask(actorA, Request).mapTo[Int] 之后完成,下一行for-information,(actorB ask Request).mapTo[String] ,被执行。

一旦该 future 完成,则对 for-comprehension 中的第三个表达式进行评估,并开始第三个 future 。

要让这些 future 同时运行,您必须首先启动所有三个 future ,然后仅在 for-comprehension 中使用它们:

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 - for comprehension 里面的 future 的执行顺序(顺序还是并发)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com