Scala 等待响应,超时在“中”;“派遣”;图书馆
我将用它来编写一个简单的HTTP客户端。我调用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
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
returnscala.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
}