【发布时间】:2023-03-09 19:05:02
【问题描述】:
here 已经提出了一个类似的问题,但一些回复并没有完全确认如何异步运行原始的“独立”Futures(而不是链式 flatMaps 或用于理解) )。我也很好奇这种情况,有多个链接的 Futures 都“依赖”于原始 Futures 但彼此不依赖。
不管怎样,这就是我正在做的事情:
val f0 = Future { foo() }
val f1 = Future { bar() }
val f01 = for { v0 <- f0; v1 <- f1 } yield (v0, v1)
f01.flatMap { case (v0, v1) =>
val f2 = Future { baz(v0, v1) }
val f3 = Future { qux(v0, v1) }
for { v2 <- f2; v3 <- f3 } yield (v2, v3)
}
这就是我想做的事情:
val f0 = Future { foo() }
val f1 = Future { bar() }
for { v0 <- f0; v1 <- f1 } flatYield {
val f2 = Future { baz(v0, v1) }
val f3 = Future { qux(v0, v1) }
for { v2 <- f2; v3 <- f3 } yield (v2, v3)
}
有什么方法可以做到这一点,而无需先产生原始值,然后再将它们全部写入链接的flatMap 的参数中?
【问题讨论】:
-
好的,有人填我。为什么不
for {v0<-f0; v1<-f1} yield (baz(v0,v1), qux(v0,v1))? -
@jwvh 在您的示例中,
baz和qux将按顺序运行(而不是并行运行)。
标签: scala future for-comprehension