在 Scala 期货中,我应该让我的函数返回 Future 还是返回 Try?
Posted
技术标签:
【中文标题】在 Scala 期货中,我应该让我的函数返回 Future 还是返回 Try?【英文标题】:In Scala futures, should I make my functions return a Future or return a Try? 【发布时间】:2014-07-03 10:20:43 【问题描述】:当我使用 Scala 期货时,我对应该返回未来还是返回 Try 感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的 Try,并且该函数的用户可以使用该函数来创建未来。
【问题讨论】:
【参考方案1】:Future
s 可能会失败,是的,但是这种失败是自包含的——它不会传播到您的代码的其余部分。 Future
在这个意义上与Try
非常相似,实际上它所持有的值是Option[Try[T]]
。
所以当你 map
和 Future
时,你只会处理 Success
的情况,它是 value
,如果你想处理失败,你可以使用 recover
或 recoverTo
.
Future
回调函数也直接处理Try
:
Future(...).onComplete
case Success(value) => ...
case Failure(throwable) =>
当您需要异步结果时,请坚持使用Future
,因为无论如何它在内部使用Try
。
【讨论】:
所以总是返回 def something() = future ,因为它里面有 Try。【参考方案2】:如果您想异步获取结果,您应该使用Future
。 Future
有 2 种类型的结果:Success
和 Failure
,正如您所知,它们是 Try 的后代,所以无论如何,如果发生故障,您会发现它。
【讨论】:
“你知道是 Try 的后代”:错误,什么? 查看 LimbSoup 的答案 算了,我不知何故以为你在说Future
是Try
的“后代”。我可能需要再睡一会儿。【参考方案3】:
假设我正在设计另一个演员 API。我应该使用什么发送结果类型?如果我希望我的代码的客户尽可能地返回它的业务(换句话说,即发即弃类型的发送)并在将来的某个地方处理响应,我会选择Future
。如果我想阻止直到回复回复,我会选择Try
。
希望,这会让你明白一点。
【讨论】:
以上是关于在 Scala 期货中,我应该让我的函数返回 Future 还是返回 Try?的主要内容,如果未能解决你的问题,请参考以下文章
在 Scala Akka 期货中,map 和 flatMap 有啥区别?