2016-03-23 27 views
0

私は基本的にReactiveCommandです。非同期的なウィザードはありません。ちょうど平凡な旧いReactiveCommand.Create()です。私はSubscribe()例外ハンドラをとるが、例外ハンドラでブレークポイントにヒットすることはありません(私はこれを期待していませんでした)。私はThrownErrorsを購読し、決してその例外ハンドラの中のブレークポイントを打つことはありません(私はこれを期待しています)。ReactiveCommandの例外をキャッチするには?

ここではサンプルコードです:

var myCommand = ReactiveCommand.Create(); 

// this does not seem to work 
myCommand.Subscribe(
    _ => { throw new Exception("oops"); }, 
    ex => { 
      Console.WriteLine(ex.Mesage); 
      Debugger.Break(); 
      }); 

//this does not seem to work either 
myCommand.ThrownExceptions.Subscribe(
    ex => { 
      Console.WriteLine(ex.Mesage); 
      Debugger.Break(); 
      }); 

私は私の宿題をやったと話題に質問と回答を確認しました。

ReactiveUI exception handling

How to catch exception from ReactiveCommand?

私もメールリストをチェックし、発見したが、この:

var myCommand = ReactiveCommand.CreateAsyncObservable(_ => this.Throw()); 
myCommand.Subscribe(
    _ => { Console.WriteLine("How did we get here?"); }, 
    // this is not expected to work 
    ex => { 
      Console.WriteLine(ex.Message); 
      Debugger.Break(); 
      }); 

// however, I sort of expect this to work 
myCommand.ThrownExceptions.Subscribe(
    ex => { 
      Console.WriteLine(ex.Message); 
      Debugger.Break(); 
      }); 

[...] 

private IObservable<object> Throw() 
{ 
    Debugger.Break(); 
    throw new Exception("oops"); 
} 
https://groups.google.com/forum/#!topic/reactivexaml/Dkc-cSesKPY

は、だから私はいくつかの非同期溶液に、これを変更することを決めました

まだ、私は決して私のブレークポイントを打つことはありませんでしたが、Throw()メソッド。 :(

何を私が間違っているのはどのようにここに例外をキャッチすることになっています

編集:私は内から例外をスローするとき、私は、しかし、例外ハンドラのブレークポイントにヒットしない

?変更し、観察、この

private IObservable<object> Throw() 
{ 
    Debugger.Break(); 
    return Task.Factory.StartNew(() => 
      { 
       throw new Exception("oops"); 
       return new object(); 
      }).ToObservable(); 
} 

のような質問:「私はメソッド内から例外を処理できていない観測可能?」

答えて

1

これはReactiveUIの現在のリリースのバグです。 '実行'オブザーバブルを作成している間にスローされ、ReactiveCommandの内部状態は壊れた状態のままです。これは次のリリースで修正されています。

詳細はthis github issueを参照してください。

+0

正直、ありがとうございます。 –

関連する問題