Я надеялся, что код вроде следующего будет ждать обоих фьючерсов, но это не так.
object Fiddle {
val f1 = Future {
throw new Throwable("baaa") // emulating a future that bumped into an exception
}
val f2 = Future {
Thread.sleep(3000L) // emulating a future that takes a bit longer to complete
2
}
val lf = List(f1, f2) // in the general case, this would be a dynamically sized list
val seq = Future.sequence(lf)
seq.onComplete {
_ => lf.foreach(f => println(f.isCompleted))
}
}
val a = FuturesSequence
Я предположил, что seq.onComplete
будет ждать их завершения до завершения, но не так; это приводит к:
true
false
.sequence
было немного сложно найти в источнике scala.concurrent.Future, мне интересно, как реализовать параллель, которая ждет всех исходных фьючерсов (динамически размерной) последовательности или что может быть проблема здесь.
Изменить: Связанный с этим вопрос: https://worldbuilding.stackexchange.com/info/12348/how-do-you-prove-youre-from-the-future:)