一切似乎都很好。-6ren">
gpt4 book ai didi

scala - 使用 future 和 Thread.sleep

转载 作者:行者123 更新时间:2023-12-03 20:50:17 25 4
gpt4 key购买 nike

通过执行这个 scala 代码,我在控制台中没有任何输出。 (我真的不明白发生了什么)

如果我删除 Console.println("Console.println OK!") => 一切似乎都很好。

如果我删除 Thread.sleep(2000) => 一切似乎都很好。

你对此有什么想法吗?非常感谢你!

克莱门特

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

}

最佳答案

您的 await 正在等待 future 完成,这在 2 秒后完成,但它不等待 onSuccess处理程序,在另一个线程中执行(类似于future),但在Await.ready(f, 60 seconds)之后,因此进程在打印之前退出。正确处理它 - 为 onComplete 创造新的 future :

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")
Await.ready(f, ...) 的结果:
exit
OK!
OK!
Await.ready(f2, ...) 的结果:
OK!
OK!
exit

关于scala - 使用 future 和 Thread.sleep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com