futuresと timeoutsを組み合わせる方法について、いくつかの良いヒントがあります。ただし、 Future シーケンス sequenceOfFuturesでこれを行う方法に興味があります
私の最初のアプローチは次のようになります
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits._
object FutureSequenceScala extends App {
println("Creating futureList")
val timeout = 2 seconds
val futures = List(1000, 1500, 1200, 800, 2000) map { ms =>
val f = future {
Thread sleep ms
ms toString
}
Future firstCompletedOf Seq(f, fallback(timeout))
}
println("Creating waitinglist")
val waitingList = Future sequence futures
println("Created")
val results = Await result (waitingList, timeout * futures.size)
println(results)
def fallback(timeout: Duration) = future {
Thread sleep (timeout toMillis)
"-1"
}
}
一連の先物でタイムアウトを処理するより良い方法はありますか、それとも有効な解決策ですか?