2014年07月18日

ScalaのAwaitで処理をTimeoutさせる

CssBoxでWebページを収集している時に途中で詰まって動かなくなることがけっこうあったので、Awaitで指定時間以内に結果が戻ってこなければ諦める処理を書く。

こういうの簡単に書けるっていいよね。

import scala.concurrent._
import scala.concurrent.duration.DurationInt
import scala.concurrent.ExecutionContext.Implicits.global
import java.util.concurrent.TimeoutException

val f = future {
  // ここでHTTP通信の処理
}
f onSuccess {
  case content => // ここで取得した値をごにょごにょ
}

try Await.result(f, 10 seconds)
catch { case e: TimeoutException => e.printStackTrace() }