在Scala期货中,我应该让我的函数返回Future还是返回Try?

时间:2014-07-03 10:20:43

标签: scala

当我使用Scala期货时,我对是否应该返回未来或返回Try感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的Try,并且该函数的用户可以使用该函数来创建未来。

3 个答案:

答案 0 :(得分:4)

Future可能会失败,是的,但失败是自包含的 - 它不会传播到你的其余代码。在这个意义上,FutureTry非常相似,实际上它所拥有的值是Option[Try[T]]

因此,当您map Future时,您只会处理Success value recover的情况,如果您愿意处理失败,您可以使用recoverToFuture

Try回调函数也直接处理 Future(...).onComplete { case Success(value) => ... case Failure(throwable) => }

Future

当您需要异步结果时,请坚持Try,因为它内部使用{{1}}。

答案 1 :(得分:0)

如果您想异步获取结果,请使用FutureFuture有两种类型的结果:SuccessFailure正如您所知,它们是Try的后代,所以无论如何,如果它发生,您将会捕获failre。

答案 2 :(得分:0)

假设我正在设计另一个演员API。我应该将什么用于发送的结果类型?如果我希望我的代码的客户尽可能地返回它的业务(换句话说,发送方式为“即发即弃”)并在将来的某个地方处理响应,我会选择Future。如果我想阻止响应将返回,我将选择Try

希望,这对你来说有点清楚。