2
我创建了一个ReactiveAsyncCommand(SL5),并且无法获取订阅以触发OnError方法。下面是代码订阅ReactiveAsyncCommand不会调用抛出异常的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。
它是预期的行为,我都必须订阅指令的ThrownExceptions *和*指定RegisterAsyncTask()中的OnError lambda。Subscribe()?如果我省略了OnError lambda(在我的情况下它将是空的),在ThrownExceptions处理程序执行并返回后,异常将在UI线程上引发(在我无法捕获它的上下文中)。如果两者都被指定,则两者都会被执行,并且异常不会在UI线程上抛出。 –
它可能目前是预期的行为,但预期的行为很糟糕。你能提交一个错误吗? –