2

我将使用Dispatch编写一个简单的 HTTP 客户端。我打电话dispatch.Http给未来,打电话给未来得到回应

验证请求 = ...
val future = Http(request) // 异步调用服务器
val response = future() // 等待服务器的响应

现在我想知道如何等待timeout。我希望最后一个 API 调用是:

// 如果在超时时间内没有收到响应,则抛出异常
val 响应 = 未来(超时:长)

是否有意义 ?

我了解Dispatchreturn scala.concurrent.Future,它不提供 API 超时。你会建议我如何实施它?

4

2 回答 2

5

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

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

val 未来 = httpApplicationClient(request)

...

于 2016-01-19T08:37:06.357 回答
3

首先,您可以使用Await

import scala.concurrent.Await
import scala.concurrent.duration._

Await.result(future, 10 seconds) //you can specify timeout here

问题是如果未来没有在指定的超时时间内返回,它将抛出异常。

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

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
}
于 2014-03-18T13:38:17.377 回答