0

私は 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)

これを行うためのより簡単な方法はありますか?

4

1 に答える 1

4

で先物をフラットマップできますfor

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

f.onSuccess { println }
于 2014-02-24T07:13:18.137 に答える