2

我创建了一个 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);

以及 Start 的代码

 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。

4

1 回答 1

3

通常,您的期望是完全正确的。但是,RegisterAsync*有效拦截OnError. 这使得对 进行编程变得更容易RegisterAsync,因为一旦你处理了OnError一次,在 中Subscribe,它就永远不会再工作了。处理ThrownExceptions您不需要处理重新订阅的方式。

如果这没有意义,请不要担心,只需处理ThrownExceptions并假设订阅只接收OnNext

于 2012-12-27T06:54:24.577 回答