【发布时间】:2014-07-03 10:20:43
【问题描述】:
当我使用 Scala 期货时,我对应该返回未来还是返回 Try 感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的 Try,并且该函数的用户可以使用该函数来创建未来。
【问题讨论】:
标签: scala
当我使用 Scala 期货时,我对应该返回未来还是返回 Try 感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的 Try,并且该函数的用户可以使用该函数来创建未来。
【问题讨论】:
标签: scala
Futures 可能会失败,是的,但是这种失败是自包含的——它不会传播到您的代码的其余部分。 Future 在这个意义上与Try 非常相似,实际上它所持有的值是Option[Try[T]]。
所以当你 map 和 Future 时,你只会处理 Success 的情况,它是 value,如果你想处理失败,你可以使用 recover 或 recoverTo .
Future回调函数也直接处理Try:
Future(...).onComplete {
case Success(value) => ...
case Failure(throwable) =>
}
当您需要异步结果时,请坚持使用Future,因为无论如何它在内部使用Try。
【讨论】:
如果您想异步获取结果,您应该使用Future。 Future 有 2 种类型的结果:Success 和 Failure,正如您所知,它们是 Try 的后代,所以无论如何,如果发生故障,您会发现它。
【讨论】:
Future 是Try 的“后代”。我可能需要再睡一会儿。
假设我正在设计另一个演员 API。我应该使用什么发送结果类型?如果我希望我的代码的客户尽可能地返回它的业务(换句话说,即发即弃类型的发送)并在将来的某个地方处理响应,我会选择Future。如果我想阻止直到回复回复,我会选择Try。
希望,这会让你明白一点。
【讨论】: