我在斯卡拉以下代码:斯卡拉期货基础知识
case class Water(temp: Int)
case class Milk(temp: Int)
def heatWaterFor(minutes: Int, water: Water) = Future {
Thread.sleep(1000)
Water(82)
}
def boilMilkFor(minutes: Int, milk: Milk) = Future {
Thread.sleep(1000)
Milk(90)
}
def frothMilk(hotwater: Water, hotmilk: Milk) = Future {
Thread.sleep(1000)
hotmilk
}
val start = System.currentTimeMillis()
val milkMaker = for {
water <- heatWaterFor(10, Water(10))
milk <- boilMilkFor(5, Milk(10))
frothed = frothMilk(water, milk)
hotMilk <- frothed
} yield (hotMilk)
Await.ready(milkMaker, Duration.Inf)
val end = System.currentTimeMillis() - start
println(milkMaker.value + " , Time taken: "+((end/1000))+" seconds.")
我在这里的目的是并行heatWaterFor(...)
和boilMilkFor(...)
,因为它们是独立的。但我觉得上面的代码是连续的,并没有充分利用期货的力量。显然,它运行需要3000毫秒(这是一个额外的证明)。
我在这里错过了什么基本的东西?
你介意在这里发布相关代码吗?在SO中只有链接的答案是不被接受的。 – dcastro
拿了点,但marstran已经在他的答案中发布了代码,所以我不会再发布它。 – markiz