我希望此代码将引发TimeoutException,但不会。我该怎么办?
import com.twitter.conversions.time._
import com.twitter.util.{Await, Future}
object Tmp {
def main(args: Array[String]): Unit = {
Await.result(
Future{
Thread.sleep(10000000)
},
1 second
)
}
}
答案 0 :(得分:3)
Future.apply
方法的scaladoc有一个注释,指出:
a
在调用线程中执行,因此必须特别注意阻塞代码。
因此,通常,您不应该对期货执行冻结操作。
如果要阻止通话,则应使用com.twitter.util.FuturePool
。可以在Twitter Util文档的Blocking or synchronous work部分中找到有关执行阻止调用的更多背景。
因此您的代码应如下所示:
import com.twitter.conversions.time._
import com.twitter.util.{Await, FuturePool}
object Tmp {
def main(args: Array[String]): Unit = {
Await.result(
FuturePool.unboundedPool {
Thread.sleep(5000)
},
1 second
)
}
}
在此示例中,我以unboundedPool
作为快速示例。但是请检查FuturePool documentation,以找到适合您的用例的FuturePool
。