我是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)
有没有更直接的方法来做到这一点?
答案 0 :(得分:4)
您可以在for
:
val f = for {
r1 <- f1
r2 <- f2
} yield (r1, r2) //any operations like `yield r1 + r2`
f.onSuccess { println }