我在斯卡拉以下代碼:斯卡拉期貨基礎知識
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