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 completedmessage:

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à ?

Était-ce utile?

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 !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top