Я недавно обновил до ReactiveUI 9.3.5, документация предлагает обрабатывать ошибки глобально через RxApp.DefaultExceptionHandler
:
// set at startup
RxApp.DefaultExceptionHandler = new GlobalErrorHandler();
public class GlobalErrorHandler : IObserver<Exception>
{
public void OnNext(Exception error)
{
Debug.Write("An error occurred");
}
public void OnError(Exception error) { }
public void OnCompleted() { }
}
Когда команда выдает исключение, тогда глобальный обработчик ошибок вызывается, как и ожидалось.
Проблема заключается в том, что приложение впоследствии все равно будет аварийно завершать работу с необработанным исключением:
// this crashes the app
var command = ReactiveCommand.CreateFromTask(async () =>
{
throw new Exception();
})
.Execute()
.Subscribe(x =>
{
Debugger.Break();
});
Является ли это ожидаемым поведением и как можно перехватывать и обрабатывать исключения в реактивном коде во всем мире?
Ранее я использовал UserError
для генерации и обработки ошибок в глобальном масштабе, но это устарело.