En exécutant ce scala, je n'ai aucune sortie dans la console. (Je ne comprends pas vraiment ce qui se passe)
Si je supprime Console.println("Console.println OK!")
=> tout va bien.
Si je supprime Thread.sleep(2000)
=> tout va bien.
Avez-vous des idées à ce sujet? Merci beaucoup!
Clément
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import scala.language.postfixOps
object ScalaFuture {
def main(args: Array[String]) {
val f: Future[String] = Future {
Thread.sleep(2000)
"future value"
}
f.onSuccess {
case s => {
Console.println("Console.println OK!")
System.out.println("System.out.println OK!")
}
}
Await.ready(f, 60 seconds)
}
}
Votre attente attend la fin de l'avenir, ce qui se fait après 2 secondes, mais il n'attend pas le gestionnaire onSuccess
, qui s'exécute dans un autre thread (similaire à future), mais après Await.ready(f, 60 seconds)
, donc le processus se termine plus tôt que vous n'imprimez quelque chose. Pour le traiter correctement - créez un nouvel avenir pour onComplete
:
val f: Future[String] = Future {
Thread.sleep(2000)
"future value"
}
val f2 = f map { s =>
println("OK!")
println("OK!")
}
Await.ready(f2, 60 seconds)
println("exit")
Résultats pour Await.ready(f, ...)
:
exit
OK!
OK!
Résultats pour Await.ready(f2, ...)
:
OK!
OK!
exit