2016-05-31 4 views
2

Это довольно общий вопрос, но, надеюсь, разумный. Когда вызывается ExecutionContext#reportFailure(Throwable)?Когда вызывается ExecutionContext # reportFailure (Throwable)?

Это, похоже, не называется в стандартной библиотеке Scala. Полагаю, мне, возможно, стоит назвать это в некоторых случаях? Что это?

ответ

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, оно отправляется этому методу.

Смежные вопросы