只是试图让我的第一个 future 使用并运行,并进行类似于 Akka in Action MEAP 书中概述的示例的测试。我想调用一个网络服务并在将来返回结果。我正在使用 scalaxb 访问 Web 服务。我已经概述了下面的代码,但是当我运行它时,应用程序将终止而不等待服务的响应。也许有人可以告诉我我错过了什么?
import scala.util._
import control.NonFatal
import scala.concurrent._
import ExecutionContext.Implicits.global
object Test {
val service = (new MyServiceBindings with scalaxb.Soap11Clients with scalaxb.DispatchHttpClients {}).service
def test = {
val f = future {
service.someCall() match {
case Right(resp) => resp
case Left(fault) => throw new Exception("Fault: " + fault)}
}
}
f.onComplete {
case Success(resp) => println("Resp: " + resp)
case Failure(NonFatal(e)) => println("Fail: " + e)
}
}
def main(args: Array[String]): Unit = {
test
}
}
它终止是因为测试内执行的主线程已完成。 Dispatch 库内部使用的线程不会阻止程序退出。
您需要等待未来,因为这是您的测试应用程序正在做的唯一事情。将其放在 onComplete 语句之后。
import scala.concurrent.duration._
Await.ready(f, 10.seconds)
现在请记住,这通常是不好的做法。您在这里需要它,因为您的测试应用程序不执行任何其他操作,但在真正的应用程序中,您不希望在每次 future 调用后阻塞,因为这会否定使用 future 的意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)