本文介绍了差异Await.ready和Await.result的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这是一个悬而未决的问题,对不起.

I know this is quite an open ended question and I apologize.

我看到 Await.ready 返回 Awaitable.type ,而 Await.result 返回 T ,但是我仍然让他们感到困惑.

I can see that Await.ready returns Awaitable.type while Await.result returns T but I still confuse them.

两者之间有什么区别?

是一个阻止,另一个是非阻止吗?

Is one blocking and the other one non-blocking?

推荐答案

它们都阻塞直到将来完成,区别只是它们的返回类型.

They both block until the future completes, the difference is just their return type.

当您的 Future 引发异常时,这种区别非常有用:

The difference is useful when your Future throws exceptions:

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

这篇关于差异Await.ready和Await.result的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 23:32