我有未来计算一些计算,我想得到结果。我必须使用变体Await.result(...)(它工作正常)。但是 onSuccess 在Future中的方法,但它不能确保我在计算完成之前获取结果。在Future中使用onSuccess方法的目的和范围是什么?
答案 0 :(得分:3)
onSuccess
无阻塞。
val f = Future { Thread.sleep(1000) }
f.onSuccess { case _ => println("success" }
println("before success")
这将输出:
before success
success
未来成功完成后, onSuccess
将始终执行。这种方法的主要优点是,您可以在等待未来完成的同时继续前进并做其他事情。
使用Await.result
,在Future
完成之前,它不会转到下一行。
答案 1 :(得分:0)
它是一种异步方法,并利用控制反转。这意味着当您的Future完成时,可以处理结果。您也可以将最终计算放入Futures onSuccess中,并且只有在结果存在时才会计算出来。如果您需要在某处返回结果,而不是通过回调,例如,您需要等待Future或者只需返回它并在需要时处理它的结果。