I know this is quite an open ended question and I apologize.
I can see that Await.ready
returns Awaitable.type
while Await.result
returns T
but I still confuse them.
What are the difference between the two?
Is one blocking and the other one non-blocking?
They both block until the future completes, the difference is just their return type.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With