我创建了一个ReactiveAsyncCommand(SL5)并且无法获得触发OnError方法的订阅。这是代码
Start1Command = new ReactiveAsyncCommand();
Start1Command.RegisterAsyncObservable(_ => this.Start())
.Subscribe<int>(
u => Debug.WriteLine("OnNext-->" + u.ToString()),
ex => Debug.WriteLine("OnError-->" + ex.Message),
() => Debug.WriteLine("OnComplete-->")
);
Start1Command.Execute(null);
开始
的代码 public IObservable<int> Start()
{
return Observable.Start(() =>
{
throw new Exception("Exception");
return 42;
},
RxApp.TaskpoolScheduler);
}
当我运行此代码时,我从ReactiveUI框架中获得一个异常,它建议我应该订阅ThrownExceptions。当我这样做时,上面抛出的异常被正确处理。
Start1Command.ThrownExceptions.Subscribe(ex => Debug.WriteLine("ThrownExceptions OnNext-->" + ex.Message));
我是否应该预期命令订阅会调用OnError?或者我必须使用ThrownExceptions。
答案 0 :(得分:3)
通常情况下,您的期望是完全正确的。但是,RegisterAsync*
会有效拦截OnError
。这样可以更轻松地针对RegisterAsync
进行编程,因为一旦您处理OnError
一次,在Subscribe
中,它就再也无法工作了。处理ThrownExceptions
意味着您不需要处理重新订阅。
如果这没有意义,请不要担心,只需处理ThrownExceptions
并假设订阅仅接收OnNext