【发布时间】:2015-08-13 02:01:30
【问题描述】:
我有两个在 Future 中发生的计算,如下所示:
val comp1 = Future { ... }
val comp2 = Future { ... }
我希望它运行,以便 comp2 始终在 comp1 完成后运行!我知道使用 for 表达式,我可以组成这两个 Future 的like。
for {
comp1Result <- comp1
comp2Result <- comp2
} yield { ... }
comp1 在 comp2 之前完成的保证是什么?我的意思是这些是在不同线程中发生的计算,并且不能保证它可能运行的顺序。有没有办法保证订单不阻塞?
【问题讨论】:
-
Scala Async 能解决这个问题吗?
-
好吧......如果你愿意,你可以把另一个未来放在第一个的 onComplete 中,如果这符合你的目的。
-
如果我有 4 个在一个链中,而链中的每个 Future 都需要一个才能完成?
-
map和 flatMap 用于此目的。future2 = future1.map( val => 2*val )或future2 = future1.flatMap( val => buildFuture( val ) )