這是一個相當普遍的問題,但希望是一個合理的問題。什麼時候叫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
內引發異常時,將發送到此方法。