【发布时间】:2016-04-29 08:12:47
【问题描述】:
我对以下代码有疑问。我希望在所有 groundCoffee、heaterWater、frothedMilk 方法完成后触发“combine”方法。它们将同时触发。所有 4 种方法磨碎、加热水、泡沫牛奶、冲泡都是使用未来同时执行的。
def prepareCappuccino(): Future[Cappuccino] = {
val groundCoffee = grind("arabica beans")
val heatedWater = heatWater(Water(20))
val frothedMilk = frothMilk("milk")
for {
ground <- groundCoffee
water <- heatedWater
foam <- frothedMilk
espresso <- brew(ground, water)
} yield combine(espresso, foam)
}
当我执行上述方法时,我得到的输出如下
start grinding...
heating the water now
milk frothing system engaged!
然后程序退出。当我试图学习期货时,我从一个网站上得到了这个例子。如何让程序等待,以便在所有期货返回后触发组合方法?
【问题讨论】:
-
感谢 @om-nom-nom 帮助格式化
-
您可以只输入 Thread.sleep(duration) 或使用 scala.concurrent 包中的 Await
-
是的,我可以这样做。当我使用断点时,程序按预期完成。但这不是我想要的。有没有其他方法可以在没有程序退出的情况下执行 combine 方法?希望我不会混淆太多
-
我刚刚给了你解决方案。
import scala.concurrent.duration._ scala.concurrent.Await.ready(prepareCappuccino, 5.seconds)
标签: scala for-loop for-comprehension