Scala Future no devuelve nada al asignar demasiada memoria
-
26-12-2019 - |
Pregunta
Al utilizar Scala-IDE 3.0.3 (basado en Scala 2.10.4), el siguiente código se completa correctamente mostrando los primeros 10 valores del cálculo List
desde un futuro así como el Future completed
mensaje:
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)
}
Sin embargo, cambiando el rango List.range(1, 50)
a List.range(1, 5000)
no muestra nada y (el Failure
no se activa).Lógicamente parece que está relacionado con un problema de memoria pero no entiendo qué pasa ahí.
Aún más extraño, ejecutar este código en un REPL no causa el problema.¿Qué me falta ahí?
Solución
Resulta que todo el asunto no es un problema con la administración de la memoria en Futures
, pero está relacionado con la forma en que Eclipse maneja la salida de la consola para programas concurrentes.
Agregar Thread.sleep(1000)
al final del programa Permita que Eclipse muestre toda la salida de la consola, resolviendo el problema.
¡Muchas gracias a @jilen por su comentario muy útil!