【发布时间】:2020-03-20 19:04:36
【问题描述】:
假设我有一个函数foo,它执行异步计算并返回一个Future:
def foo(x: Int)(implicit ec: ExecutionContext): Future[Int] = ???
现在我想重试这个计算n 次,直到计算成功。
def retryFoo(x: Int, n: Int)(implicit ec: ExecutionContext): Future[Int] = ???
我还想返回重试时抛出的所有个异常。因此,我定义了新的异常类 ExceptionsList 并要求 retryFoo 在所有重试失败时返回 ExceptionsList。
case class ExceptionsList(es: List[Exception]) extends Exception { ... }
您将如何编写retryFoo 以重试foo 并返回带有foo 结果或ExceptionsList 的Future?
【问题讨论】:
-
是否应该仅在方法最终失败时才返回异常列表?或者,例如,重试限制为 5,并且方法在第 3 次尝试时成功,它是否应该返回前两次失败的结果和异常?
-
谢谢,好问题!我写道,只有当 all 重试失败时才需要例外。然而,即使最后一次重试成功,返回之前的异常也是有意义的。