com.twitter.util.Await 没有引发 com.twitter.util.TimeoutException

com.twitter.util.Await doesn't raise a com.twitter.util.TimeoutException

我预计此代码会引发 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
    )
  }
}

Future.apply 方法的 scaladoc 有一条说明:

a is executed in the calling thread and as such some care must be taken with blocking code.

所以一般来说你不应该用 Futures 执行阻塞操作。

如果你想阻止调用,你应该使用 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