プロジェクトでディスパッチ リブート ライブラリ バージョン 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 ) )
(3 行目は、1 つのスレッドと 10 秒のタイムアウトで独自のスレッドプールを設定していると思います)。
次に、このコードを (貼り付けモードで) 繰り返し実行し、future を送信して特定の URL をフェッチし、ステータス コードを (非同期で) 出力します。
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 回の呼び出しでは、期待どおりに機能します。次に、成功したページ応答または例外のいずれかを確実に報告できません。これがタイムアウトによって引き起こされた場合、何らかの形式のタイムアウト例外を含むLeft
句を使用して、10 秒後にコールバックが起動することを期待する必要があると想定しました。Either
しかし、私の経験では、これは決して起こりません。
私が間違っていることを教えてくれる人はいますか?
アップデート
ちなみに、ここに同様の質問(回答付き)があることは承知していますが、タイムアウトを処理する公式の(つまり、ライブラリの作成者が意図した)方法を探しています-そして、これがそのwaiting
方法であるように見えますのために設計された