准备好的方法和Scala中Future的结果不能直接调用

时间:2013-05-17 16:55:13

标签: scala concurrency future

我注意到ready的方法resultscala.concurrent.Future无法直接调用。当我在REPL中调用它时,我收到错误。因此,我必须拨打Await.readyAwait.result

没关系,但看起来有点尴尬。所以现在我想知道:

  • 为什么不能直接调用它们;
  • 为什么在这种情况下它们作为公共API公开。

1 个答案:

答案 0 :(得分:4)

原因是in official doc

  

Future trait使用方法方法实现Awaitable trait   ready()和result()。这些方法不能直接调用   客户端 - 它们只能由执行上下文调用。

通过这种方式,库设计人员强制您在适当的环境中使用这些方法(执行上下文,可能是第三方,或通过Awaitable对象明确表示阻塞操作)。