Scala Future ne renvoie rien lors de l'allocation de trop de mémoire
-
26-12-2019 - |
Question
En utilisant Scala-IDE 3.0.3 (basé sur Scala 2.10.4), le code suivant se termine correctement en affichant les 10 premières valeurs du calcul List
d'un futur ainsi que du Future completed
message:
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)
}
Cependant, changer la gamme List.range(1, 50)
à List.range(1, 5000)
n'affiche rien et (le Failure
n’est pas déclenché).Logiquement, cela semble être lié à un problème de mémoire mais je ne comprends pas ce qui se passe là.
Encore plus étrange, l'exécution de ce code dans un REPL ne pose pas de problème.Qu'est-ce qui me manque là ?
La solution
Il s'avère que tout cela n'est pas un problème de gestion de la mémoire dans Futures
mais cela est lié à la façon dont Eclipse gère la sortie de la console pour les programmes simultanés.
Ajouter Thread.sleep(1000)
à la fin du programme, laissez Eclipse afficher toutes les sorties de la console, résolvant ainsi le problème.
Merci beaucoup @jilen pour votre commentaire très utile !