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線程上拋出。 –
它可能目前是預期的行爲,但預期的行爲很糟糕。你能提交一個錯誤嗎? –