複数のFutureを持つメソッドをAwaitすると、最初のFutureが完了したタイミングでAwaitが完了する
import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
def futureSleep10000(): Future[Unit] = Future {
Thread.sleep(10000)
println("10,000ms slept")
}
def futureSleep5000(): Future[Unit] = Future {
Thread.sleep(5000)
println("5,000ms slept")
}
def callFuncs(): Future[Unit] = {
for {
_ <- futureSleep10000()
} yield ()
for {
_ <- futureSleep5000()
} yield ()
}
Await.result(callFuncs(), Duration.Inf)
// -----result-----
// 5,000ms slept
それぞれAwaitするか、一つのfor comprehension内で呼ぶ(Futureを1つにまとめる)かする
import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
def futureSleep10000(): Future[Unit] = Future {
Thread.sleep(10000)
println("10,000ms slept")
}
def futureSleep5000(): Future[Unit] = Future {
Thread.sleep(5000)
println("5,000ms slept")
}
def callFuncs(): Future[Unit] = {
for {
_ <- futureSleep10000()
_ <- futureSleep5000()
} yield ()
}
Await.result(callFuncs(), Duration.Inf)
// -----result-----
// 10,000ms slept
// 5,000ms slept