Frage

Mit Scala-IDE 3.0.3 (basierend auf Scala 2.10.4) wird der folgende Code korrekt abgeschlossen, indem die ersten 10 Werte des berechneten Codes angezeigt werden List aus einer Zukunft sowie der Future completedNachricht:

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)
}

Ändern Sie jedoch den Bereich List.range(1, 50) zu List.range(1, 5000) zeigt nichts an und (die Failure wird nicht ausgelöst).Logischerweise scheint es mit einem Speicherproblem zu tun zu haben, aber ich verstehe nicht, was dort passiert.

Noch seltsamer ist, dass das Ausführen dieses Codes in einer REPL das Problem nicht verursacht.Was vermisse ich da?

War es hilfreich?

Lösung

Es stellt sich heraus, dass das Ganze kein Problem mit der Speicherverwaltung in ist Futures es hängt jedoch damit zusammen, wie Eclipse die Konsolenausgabe für gleichzeitige Programme verarbeitet.

Zugabe Thread.sleep(1000) lassen Sie Eclipse am Ende des Programms die gesamte Konsolenausgabe anzeigen, um das Problem zu lösen.

Vielen Dank @jilen für Ihren sehr hilfreichen Kommentar!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top