Scala Future não retorna nada ao alocar muita memória
-
26-12-2019 - |
Pergunta
Usando Scala-IDE 3.0.3 (baseado em Scala 2.10.4), o código a seguir é concluído corretamente exibindo os primeiros 10 valores do cálculo List
de um futuro, bem como do Future completed
mensagem:
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)
}
No entanto, alterando o intervalo List.range(1, 50)
para List.range(1, 5000)
não exibe nada e (o Failure
não é acionado).Logicamente, parece estar relacionado a um problema de memória, mas não entendo o que está acontecendo aí.
Ainda mais estranho, executar esse código em um REPL não causa o problema.O que estou perdendo aí?
Solução
Acontece que a coisa toda não é um problema com o gerenciamento de memória no Futures
mas está relacionado à maneira como o Eclipse lida com a saída do console para programas simultâneos.
Adicionando Thread.sleep(1000)
ao final do programa deixe o Eclipse mostrar toda a saída do console, resolvendo o problema.
Muito obrigado @jilen pelo seu comentário muito útil!