Scala 等待响应,超时在“中”;“派遣”;图书馆

Scala 等待响应,超时在“中”;“派遣”;图书馆,scala,http,concurrency,scala-dispatch,Scala,Http,Concurrency,Scala Dispatch,我将用它来编写一个简单的HTTP客户端。我调用dispatch.Http获取未来,并调用未来获取响应 val request = ... val future = Http(request) // call the server asynchronously val response = future() // wait for the response from the server val请求=。。。 val future=Http(请求)//异步调用服务器 val response=fut

我将用它来编写一个简单的HTTP客户端。我调用
dispatch.Http
获取未来,并调用未来获取响应

val request = ... val future = Http(request) // call the server asynchronously val response = future() // wait for the response from the server val请求=。。。 val future=Http(请求)//异步调用服务器 val response=future()//等待服务器的响应 现在我想知道我怎么能等待超时。我希望最后一个API调用是:

// throw an exception if no response received within timeout val response = future(timeout: Long) //如果在超时内未收到响应,则引发异常 val响应=未来(超时:长) 这有意义吗

我知道
Dispatch
return
scala.concurrent.Future
,它不提供带超时的API。您建议我如何实施它?

首先,您可以使用:

问题是,如果future未能在指定的超时时间内返回,它将抛出异常

如果您需要更大的灵活性,这里是第二种方法:

val futureTimeout = Promise.timeout("Timed out" /* or throw new RuntimeException("timed out") */, 10 seconds)
Future.firstCompletedOf(Seq(futureResult, futureTimeout)).map {
  case result: SomeType => //do something
  case timedOut: SomeOtherType => //handle timeout
}

您可以创建已配置的Http客户端:

val httpApplicationClient=Http.configure( _.SetRequestTimeOutims(3000) )

val future=httpApplicationClient(请求)


谢谢你!我忘了等待!你从哪里得到的承诺,暂停?我在API中没有看到它:.Promise.timeout是特定于播放框架的。这似乎是文档的链接:
.setRequestTimeout(3000)
,因为异步HTTP客户机1.9。这也可以在每个请求中完成:
req.underground(
.setRequestTimeout(3000))
当我第一次阅读此答案时,我无法找到作者信息的来源。经过一些挖掘,我找到了
dispatch
的javadoc:并将其与
AsyncHttpClientConfig.Builder
val futureTimeout = Promise.timeout("Timed out" /* or throw new RuntimeException("timed out") */, 10 seconds)
Future.firstCompletedOf(Seq(futureResult, futureTimeout)).map {
  case result: SomeType => //do something
  case timedOut: SomeOtherType => //handle timeout
}