这是一个相当普遍的问题,但希望是一个合理的问题。什么时候叫ExecutionContext#reportFailure(Throwable)
?什么时候ExecutionContext#reportFailure(Throwable)被调用?
它似乎没有在Scala标准库中调用。我想我应该在某些情况下调用它?这些是什么?
这是一个相当普遍的问题,但希望是一个合理的问题。什么时候叫ExecutionContext#reportFailure(Throwable)
?什么时候ExecutionContext#reportFailure(Throwable)被调用?
它似乎没有在Scala标准库中调用。我想我应该在某些情况下调用它?这些是什么?
它在标准库中的Promise
的执行过程中被称为几次深度。请参阅source。
try onComplete(value) catch { case NonFatal(e) => executor reportFailure e }
的ExecutionContext
可以实现reportFailure
当未来/承诺未能执行任意代码。标准库中实现此方法的唯一方法是ExecutionContextImpl
,它不在公共API中,但找到了here。该课程接受reporter: Throwable => Unit
函数。默认ExecutionContext.Implicits.global
使用ExecutionContext.defaultReporter
,它只是将堆栈跟踪打印到System.err
。
如果要定制行为,则可能需要定义自己的ExecutionContext
。很难想象一种情况,除了记录堆栈跟踪或其他类型的日志记录之外,您想要产生其他副作用。
此方法报告不能报告的异常。
当在没有其他报告失败方式的回调执行期间发生异常时调用它。特别是,对Future.onComplete
(例如通过Future.foreach
)的呼叫返回Unit
并且可以在任何线程上执行,因此他们没有办法向其呼叫者报告故障。在onComplete
内引发异常时,将发送到此方法。