Wie kann ich warten, für ein Scala Zukunft der onSuccess-callback-zu vervollständigen?

In Scala, die ich verwenden kann Await zu warten, für eine Zukunft zu vervollständigen. Allerdings, wenn ich mich registriert habe ein callback ausführen nach Abschluss der Zukunft aus, wie kann ich das warten nicht nur für die Zukunft abgeschlossen, sondern auch für den Rückruf zu beenden?

Hier ist ein minimales, aber komplettes Programm, um das problem zu veranschaulichen:

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.concurrent.{ Await, Future }

object Main {
  def main(args: Array[String]): Unit = {
    val f: Future[Int] = Future(0)
    f.onSuccess { case _ =>
      Thread.sleep(10000)
      println("The program waited patiently for this callback to finish.")
    }

    //This waits for `f` to complete but doesn't wait for the callback
    //to finish running.
    Await.ready(f, Duration.Inf)
  }
}

Erwarte ich die Ausgabe:

The program waited patiently for this callback to finish.

Statt, es gibt keine Ausgabe; das Programm beendet wird, bevor der Rückruf beendet ist.

Bitte beachten Sie, dass dies nicht das gleiche problem als erwartet für die Zukunft zu ergänzen, die zuvor bereits beantwortet wurde bei diese Frage.

InformationsquelleAutor Daniel Li | 2016-01-15

Schreibe einen Kommentar