結合多種期貨進行理解
理解力是執行取決於多種期貨的成功結果的程式碼塊一個緊湊的方式。
用 f1, f2, f3
三個 Future[String]
分別包含字串 one, two, three
,
val fCombined =
for {
s1 <- f1
s2 <- f2
s3 <- f3
} yield (s"$s1 - $s2 - $s3")
所有期貨成功完成後,fCombined
將成為包含字串 one - two - three
的 Future[String]
。
請注意,此處假定使用隱式 ExectionContext。
另外,請記住,理解只是 flatMap 方法的一種語法糖 ,因此對於 body 來說,Future 物件構造將消除由期貨包含的程式碼塊的併發執行並導致順序程式碼。你在例子中看到它:
val result1 = for {
first <- Future {
Thread.sleep(2000)
System.currentTimeMillis()
}
second <- Future {
Thread.sleep(1000)
System.currentTimeMillis()
}
} yield first - second
val fut1 = Future {
Thread.sleep(2000)
System.currentTimeMillis()
}
val fut2 = Future {
Thread.sleep(1000)
System.currentTimeMillis()
}
val result2 = for {
first <- fut1
second <- fut2
} yield first - second
result1
物件所包含的值將始終為負值,而 result2
將為正值。
有關 for comprehension 和 yield
的更多詳細資訊,請參閱 http://docs.scala-lang.org/tutorials/FAQ/yield.html