4

我希望这段代码会引发 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
    )
  }
}
4

1 回答 1

3

该方法的scaladocFuture.apply一个注释,其中指出:

a在调用线程中执行,因此必须注意阻塞代码。

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

如果您想阻止呼叫,您应该使用com.twitter.util.FuturePool. 更多关于执行阻塞调用的背景信息可以在 Twitter Util 文档的阻塞或同步工作部分找到。

因此,您的代码可能如下所示:

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 文档以找到适合FuturePool您的用例的文档。

于 2018-08-21T06:02:24.773 回答