Scala Future中的成功方法

Scala Future中的成功方法,scala,future,Scala,Future,我有一个未来,计算一些计算,我想得到结果。我必须使用variant wait.result(…)(工作正常)。但是成功是有困难的 方法,但它不能确保在计算完成之前获取结果。未来使用onSuccess方法的目的和范围是什么?这是一种异步方法,使用控制反转。这意味着,当您的未来完成时,结果可以处理。你也可以将你的最终计算放入Futures onSuccess中,只有当结果存在时,它才会被计算出来。例如,如果您需要在某处返回结果,而不是通过回调返回结果,那么您需要等待将来,或者只是返回结果并在需要的地

我有一个未来,计算一些计算,我想得到结果。我必须使用variant wait.result(…)(工作正常)。但是成功是有困难的
方法,但它不能确保在计算完成之前获取结果。未来使用onSuccess方法的目的和范围是什么?

这是一种异步方法,使用控制反转。这意味着,当您的未来完成时,结果可以处理。你也可以将你的最终计算放入Futures onSuccess中,只有当结果存在时,它才会被计算出来。例如,如果您需要在某处返回结果,而不是通过回调返回结果,那么您需要等待将来,或者只是返回结果并在需要的地方处理结果

这是一种异步方法,使用控制反转。这意味着,当您的未来完成时,结果可以处理。你也可以将你的最终计算放入Futures onSuccess中,只有当结果存在时,它才会被计算出来。例如,如果您需要在某处返回结果,而不是通过回调返回结果,那么您需要等待将来,或者只是返回结果并在需要的地方处理结果

onSuccess
是非阻塞的

val f = Future { Thread.sleep(1000) }
f.onSuccess { case _ => println("success" }
println("before success")
这将输出:

before success
success
onSuccess
将始终在未来成功完成时执行。这种方法的主要优点是,在等待未来完成的同时,您可以继续前进并做其他事情


使用
wait.result
,它将不会移动到下一行,直到
Future
完成。

onSuccess
是非阻塞的

val f = Future { Thread.sleep(1000) }
f.onSuccess { case _ => println("success" }
println("before success")
这将输出:

before success
success
onSuccess
将始终在未来成功完成时执行。这种方法的主要优点是,在等待未来完成的同时,您可以继续前进并做其他事情


使用
wait.result
,它将不会移动到下一行,直到
Future
完成。

这很好,这是一种对未来结果进行操作的好方法。但是如果我有这样的代码
val sumF=Future{(1L到10000l).sum};sumF onSuccess{case s=>println(s)}
我不能保证我能在控制台中看到结果您不会突然使用期货。这是一个应用程序方法的问题。是否要使用异步样式。它需要什么?依此类推。我假设onSuccess在本例中不相关:
valsumf=Future{(1L到100000L).sum};sumF onSuccess{case s=>println(s)}
。但是我如何才能正确地选择应该在成功时使用还是等待结果?如果不想阻止其他操作,请使用成功。如果在继续之前需要了解未来的价值,请使用wait.result。还有其他方法可以在不等待结果的情况下编写期货操作。看:那很好,这是一个对期货结果进行操作的好方法。但是如果我有这样的代码
val sumF=Future{(1L到10000l).sum};sumF onSuccess{case s=>println(s)}
我不能保证我能在控制台中看到结果您不会突然使用期货。这是一个应用程序方法的问题。是否要使用异步样式。它需要什么?依此类推。我假设onSuccess在本例中不相关:
valsumf=Future{(1L到100000L).sum};sumF onSuccess{case s=>println(s)}
。但是我如何才能正确地选择应该在成功时使用还是等待结果?如果不想阻止其他操作,请使用成功。如果在继续之前需要了解未来的价值,请使用wait.result。还有其他方法可以在不等待结果的情况下编写期货操作。请参阅:通常情况下,您希望避免使用
Await.result
,因为它会阻塞
未来的
,并且通常会首先删除使用
未来
的好处(避免阻塞)。当然也有例外(有时在测试中),但我发现它们很少见。通常情况下,您希望避免使用
Await.result
,因为它会阻塞
未来的
,并且通常会从一开始就取消使用
未来的
的好处(避免阻塞)。当然也有例外(有时在测试中),但我发现它们很少。