Scala for/yield 块中的执行顺序
Execution order in Scala for/yield block
我使用以下语法进行了三个数据库调用(所有 return Future
值):
for {
a <- databaseCallA
b <- databaseCallB(a)
c <- databaseCallC(a)
} yield (a,b,c)
第二次和第三次调用取决于第一次的结果,但两者可以运行并行。
如何让 databaseCallC
在 databaseCallB
之后立即发出(无需等待结果 b
)?
或者这已经发生了?
这目前没有发生 - 你已经告诉期货一个接一个地开始。要并行化第二个和第三个调用,您可以使用:
for {
a <- databaseCallA
(eventualB, eventualC) = (databaseCallB(a), databaseCallC(a))
b <- eventualB
c <- eventualC
} yield(a,b,c)
这将在 a 可用时立即开始 b 和 c 的计算,并在三元组的所有三个都可用后完成计算
我使用以下语法进行了三个数据库调用(所有 return Future
值):
for {
a <- databaseCallA
b <- databaseCallB(a)
c <- databaseCallC(a)
} yield (a,b,c)
第二次和第三次调用取决于第一次的结果,但两者可以运行并行。
如何让 databaseCallC
在 databaseCallB
之后立即发出(无需等待结果 b
)?
或者这已经发生了?
这目前没有发生 - 你已经告诉期货一个接一个地开始。要并行化第二个和第三个调用,您可以使用:
for {
a <- databaseCallA
(eventualB, eventualC) = (databaseCallB(a), databaseCallC(a))
b <- eventualB
c <- eventualC
} yield(a,b,c)
这将在 a 可用时立即开始 b 和 c 的计算,并在三元组的所有三个都可用后完成计算