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);

そしてスタートのコード

 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 に答える