Scala for/yield块中的执行顺序

Thi*_*ilo 1 concurrency scala yield future

Future使用以下语法进行三次数据库调用(全部返回值):

for {
  a <- databaseCallA
  b <- databaseCallB(a)
  c <- databaseCallC(a)
} yield (a,b,c)
Run Code Online (Sandbox Code Playgroud)

第二次和第三次调用取决于第一次调用的结果,但是它们中的两个可以并行运行.

如何databaseCallCdatabaseCallB不等待结果后立即发出b

或者这已经发生了?

Nor*_*rwæ 9

目前还没有发生这种情况 - 你告诉期货一个接一个地开始.要并行第二次和第三次调用,您可以使用:

for {
  a <- databaseCallA
  (eventualB, eventualC) = (databaseCallB(a), databaseCallC(a))
  b <- eventualB
  c <- eventualC
} yield(a,b,c)
Run Code Online (Sandbox Code Playgroud)

一旦a可用,这将开始计算b和c,并且一旦三者都可用,则完成所有三个