1

これと機能的に同等のもの

//someObservable is an observable from another part of my application which produces Command objects
//can also have a ConnectionException

IObservable<Command> someObservable;

Subject<Command> sub = new Subject<Command>();

someObservable.Subscribe(c => { }, x =>
{
        sub.OnError(x);
});

これにより、例外だけを監視できるようになり、別の場所でそれらを処理できるようになります。

4

4 に答える 4

1

マテリアライズ/デマテリアライズを使用して、例外以外のすべてを除外できます。例えば:

var subject = new Subject<int>();

var onlyExceptions = subject.Materialize().Where(n => n.Exception != null).Dematerialize();

subject.Subscribe(i => Console.WriteLine("Subscriber 1: {0}", i),
                    ex => Console.WriteLine("Subscriber 1 exception: {0}", ex.Message));

onlyExceptions.Subscribe(i => Console.WriteLine("Subscriber 2: {0}", i),
                            ex => Console.WriteLine("Subscriber 2 exception: {0}", ex.Message));

subject.OnNext(123);
subject.OnError(new Exception("Test Exception"));
于 2013-05-22T19:53:16.840 に答える
0

観察可能なエラーが発生すると、それが終了することを忘れないでください。確かにサブスクライブするか、Observable.CatchまたはFinally拡張メソッドのいずれかを使用できますが、エラーが発生するのは1つだけです。

于 2013-02-16T21:46:38.520 に答える
0

エラーのみを処理する (シーケンス内の通常のアイテムには何もしない) サブスクライバーを 1 つ作成し、Catch() を使用して他の場所でエラーを排除することができます。

于 2013-02-16T21:08:32.707 に答える