これはかなり一般的な質問ですが、うまくいけば妥当なものです。 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.foreach
経由)はUnit
を返し、任意のスレッドで実行できるため、呼び出し元に障害を報告する方法がありません。 onComplete
内に例外がスローされると、このメソッドに送信されます。