Scala Future ничего не возвращает при выделении слишком большого количества памяти
-
26-12-2019 - |
Вопрос
При использовании Scala-IDE 3.0.3 (на основе Scala 2.10.4) следующий код завершается правильно, отображая первые 10 значений вычисленного значения. List
из будущего, а также Future completed
сообщение:
import scala.concurrent._
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import ExecutionContext.Implicits.global
object FutureNonBlocking extends App {
val f1: Future[List[Int]] = future {
val t = List.range(1, 50).filter(_ % 2 == 0)
println("Done")
t
}
f1.onComplete {
case Success(value) => println(value.take(10))
case Failure(e) => println("Something bad happened")
}
Await.complete(f1, 30 seconds)
}
Однако изменение диапазона List.range(1, 50)
к List.range(1, 5000)
ничего не отображает и ( Failure
не срабатывает).Логически это похоже на проблему с памятью, но я не понимаю, что там происходит.
Еще более странно то, что запуск этого кода в REPL не вызывает проблемы.Что мне там не хватает?
Решение
Оказывается, дело не в управлении памятью в Futures
но это связано с тем, как Eclipse обрабатывает вывод консоли для параллельных программ.
Добавление Thread.sleep(1000)
в конце программы позвольте Eclipse показать весь вывод консоли, решая проблему.
Большое спасибо @jilen за ваш очень полезный комментарий!