2014-02-24 45 views
0

我是新來斯卡拉多個未來完成,剛開始學習使用Scala的API完全無阻塞性質如何在斯卡拉訂做加工取決於

我需要經過2個任務完成執行功能,curenly我這樣做以下方式:

import scala.concurrent._ 
import scala.util._ 
import scala.concurrent.duration._ 

val f1:Future[Int] = Future({ 
    Thread.sleep(800) 
    println(5) 
    5 
}) 

val f2: Future[Int] = Future({ 
    Thread.sleep(500) 
    println(6) 
    6 
}) 

val combined: Future[List[Int]] = Future.sequence(List(f1, f2)) 
combined.onComplete { 
    case Success(li) => li.foldLeft(0)((sum, x) => sum + x) 
    case Failure(t) => -1 
} 

Await.result(combined, 1 second) 

有沒有更直接的方法來做到這一點?

回答

4

可以在for flatMap期貨:

val f = for { 
    r1 <- f1 
    r2 <- f2 
} yield (r1, r2) //any operations like `yield r1 + r2` 

f.onSuccess { println }