我在项目中使用dispatch reboot library version 0.9.5(http://dispatch.databinder.net/Dispatch.html)。通过sbt,我有以下几行:
libraryDependencies += "net.databinder.dispatch" %% "dispatch-core" % "0.9.5"
在scala(2.9.2)repl中(使用sbt console
开始获取适当的依赖项)并独立于我的代码,我运行以下会话:
import dispatch._
import java.util.concurrent.TimeUnit._
val spoo = Http.threads(1).waiting( Duration(10, SECONDS ) )
(我相信第三行用一个线程设置我自己的线程池,超时为10秒)。
然后我重复运行此代码(在粘贴模式下),提交未来以获取特定网址,然后打印状态代码(异步):
spoo(url("http://www.evapcool.com/products/commercial/")).either
.map {
case Right(r) => println( "S: " + r.getStatusCode())
case Left(e) => println( "E: " + e.toString ) }
每次运行此行时,我都会等待状态代码打印,然后再次运行该行。对于前20到40个电话,它按预期工作。然后它可靠地无法报告成功的页面回复或异常。我的假设是,如果这是由超时引起的,我应该期望回调在10秒后触发,Left
的{{1}}子句包含某种形式的超时异常。但我的经验是,这永远不会到来。
任何人都可以帮我告诉我我做错了吗?
顺便说一句,我知道有一个类似的问题(答案)here但是我正在寻找官方(即图书馆作者的意图)处理超时的方式 - 而且在我看来这就是Either
方法为