我注意到方法ready
和result
ofscala.concurrent.Future
不能直接调用。当我在 REPL 中调用它们时,我得到一个错误。因此我不得不打电话给Await.ready
and Await.result
。
没关系,但看起来有点尴尬。所以现在我想知道:
- 为什么不能直接调用它们;
- 为什么在这种情况下它们被公开为公共 API。
我注意到方法ready
和result
ofscala.concurrent.Future
不能直接调用。当我在 REPL 中调用它们时,我得到一个错误。因此我不得不打电话给Await.ready
and Await.result
。
没关系,但看起来有点尴尬。所以现在我想知道:
原因在官方文档中列出:
Future trait 通过方法 ready() 和 result() 实现了 Awaitable trait。这些方法不能被客户端直接调用——它们只能被执行上下文调用。
这样,库设计者会强制您在适当的环境中使用这些方法(执行上下文,可能是第三方,或通过 Awaitable 对象明确表示阻塞操作)。