如何根据多个未来完成在Scala中构建处理

时间:2014-02-24 06:59:45

标签: scala concurrency reactive-programming rx-java

我是Scala的新手,刚开始学习使用Scala API的完全非阻塞性

我需要在2个任务完成后执行函数,我可以按照以下方式执行:

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)

有没有更直接的方法来做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以在for

中平面地预测期货
val f = for {
  r1 <- f1
  r2 <- f2
} yield (r1, r2) //any operations like `yield r1 + r2`

f.onSuccess { println }