2016-05-31 84 views

回答

1

它在标准库中的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。很难想象一种情况,除了记录堆栈跟踪或其他类型的日志记录之外,您想要产生其他副作用。

1

此方法报告不能报告的异常。

当在没有其他报告失败方式的回调执行期间发生异常时调用它。特别是,对Future.onComplete(例如通过Future.foreach)的呼叫返回Unit并且可以在任何线程上执行,因此他们没有办法向其呼叫者报告故障。在onComplete内引发异常时,将发送到此方法。

相关问题