即使 Future 已完成,Scala App 也不会退出
Scala App doesn't exit even though Future is completed
我等待 Future 完成并在控制台上打印内容。即使一切都完成了,主应用程序也不会退出,我必须手动将其杀死。
def main(args: Array[String]): Unit {
val req = HttpRequest(GET, myURL)
val res = Http().singleRequest(req)
val resultsFutures = Future {
val resultString = Await.result(HttpRequests.unpackResponse(res), Duration.Inf)
JsonMethods.parse(resultString).extract[List[Results]]
}
val results = Await.result(resultsFutures, Duration.Inf)
println(results)
}
因此 results
以预期的方式打印在控制台上,但应用程序仍未结束。
我可以做些什么来退出应用程序吗? 运行 主还在等什么吗?
我正在使用:
- scala 2.12.10
- 阿卡 2.5.26
- akkaHttp 10.1.11
当您使用 Akka 时,您可能有一个 ActorSystem
以某种方式在引擎盖下实例化,它将保持进程 运行.
您可以亲自动手调用它的 actorSystem.terminate()
方法,或者您也可以在 main 方法的末尾使用显式 sys.exit(0)
(0
是你想要的退出代码)。
编辑:您还应该将 Await
包装在 Try
中,并确保在出现故障时也调用 sys.exit
。
我等待 Future 完成并在控制台上打印内容。即使一切都完成了,主应用程序也不会退出,我必须手动将其杀死。
def main(args: Array[String]): Unit {
val req = HttpRequest(GET, myURL)
val res = Http().singleRequest(req)
val resultsFutures = Future {
val resultString = Await.result(HttpRequests.unpackResponse(res), Duration.Inf)
JsonMethods.parse(resultString).extract[List[Results]]
}
val results = Await.result(resultsFutures, Duration.Inf)
println(results)
}
因此 results
以预期的方式打印在控制台上,但应用程序仍未结束。
我可以做些什么来退出应用程序吗? 运行 主还在等什么吗?
我正在使用:
- scala 2.12.10
- 阿卡 2.5.26
- akkaHttp 10.1.11
当您使用 Akka 时,您可能有一个 ActorSystem
以某种方式在引擎盖下实例化,它将保持进程 运行.
您可以亲自动手调用它的 actorSystem.terminate()
方法,或者您也可以在 main 方法的末尾使用显式 sys.exit(0)
(0
是你想要的退出代码)。
编辑:您还应该将 Await
包装在 Try
中,并确保在出现故障时也调用 sys.exit
。