scala - Await.ready 和 Await.result 的区别

标签 scala future

我知道这是一个非常开放的问题,我深表歉意。

我可以看到 Await.ready返回 Awaitable.typeAwait.result返回 T但我仍然混淆他们。

两者有什么区别?

一个是阻塞的,另一个是非阻塞的吗?

最佳答案

它们都阻塞直到 future 完成,区别只是它们的返回类型。
当您的 Future 时,差异很有用抛出异常:

def a = Future { Thread.sleep(2000); 100 }
def b = Future { Thread.sleep(2000); throw new NullPointerException }

Await.ready(a, Duration.Inf) // Future(Success(100))    
Await.ready(b, Duration.Inf) // Future(Failure(java.lang.NullPointerException))

Await.result(a, Duration.Inf) // 100
Await.result(b, Duration.Inf) // crash with java.lang.NullPointerException

关于scala - Await.ready 和 Await.result 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170280/

相关文章:

c++ - 在没有阻塞的情况下开始剩余的 future

javascript - 遍历 Q 中的 promise

regex - 我如何在scala中选择具有指定模式的文件名

java - Netbeans scala 插件 - 无文档

java - 使用 AsyncRestTemplate 多次制作 API 并等待所有完成

c++ - 使用 "futures"或类似范例开发 C++ 并发库

sockets - 如何从 Dart 中的 Future 返回套接字数据?

postgresql - Anorm 返回 0 个结果,而 psql 返回 2 个结果

scala - 如何重构代码以避免警告 : "Adapting argument list by creating a 2-tuple"

scala - Akka websocket - 如何通过服务器关闭连接?