Я написал этот метод:Поведение метода Future.sequence SCALA в
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.util.{ Success, Failure }
object FuturesSequence extends App {
val f1 = future {
1
}
val f2 = future {
2
}
val lf = List(f1, f2)
val seq = Future.sequence(lf)
seq.onSuccess {
case l => println(l)
}
}
Я ожидал Future.sequence собрать список [будущее] в будущем [Список], а затем ждать каждый фьючерс (f1 и f2 в моем случае) для завершения до вызова onSuccess в будущем [List] seq в моем случае.
Но после многих прогонов этого кода он печатает «Список (1, 2)» только раз в то время, и я не могу понять, почему он не работает должным образом.
Приложение выхода обратного вызова до того, как может быть выполнена. –
Cf. http://stackoverflow.com/questions/16612517/execution-context-without-daemon-threads-for-futures –
Как говорили другие. Контекст исполнения по умолчанию запускает ваши фьючерсы на потоки демона, которые не останавливают запуск JVM. Если это для быстрого теста, проще всего использовать Await.result на seq –