2

同じシーケンスで繰り返される例外を飲み込む Rx オペレーターを設計することは可能ですか (再試行またはキャッチとは異なります)? 基本的に .Select(x => x) と同じですが、途中で例外を無視します。(これがガイドラインに反していることは知っています)。

4

2 に答える 2

6

短い答えは「いいえ」です。

少し短い答えは、あなたの前提に欠陥があるということです。これは、Observable に複数のエラーをスローさせることができず、仮定しているオペレーターが Observer になるためです。オブザーバーは、定義上、オブザーバブルに影響を与えるべきではありません (私が言ったことをハイゼンベルグに言わないでください)。

したがって、履歴を変更する必要があるため、そのような演算子は論理的に不可能です。戻って、Observable が例外をスローしないようにしてください。もちろん、Observable が Rx のルールに違反していない限り。

そうさせないでください。:) とにかく、Rxはこれを防ぐのにかなり良い仕事をします. Subject<T>たとえば、最初の OnError の後には公開されません。

于 2013-05-29T21:38:27.940 に答える
2

すべての Rx オペレーターはガイドラインに従います (エラーを 1 つだけ受け取ることを保証し、それから監視対象が実行されます)。したがって、Reactive ライブラリを介して作成されオブザーバブルは、複数のエラーを許可するように誘導されることはありません。

必要なものを実現するには、独自のカスタム実装IObservable<T>と独自のカスタム オペレーター (リアクティブ オペレーターを使用していないもの) を作成する必要があります。

しかし、それ以上の設計作業をせずにその道を進むことはお勧めしません。あなたは本当に何を達成しようとしているのか、問題のモデリングが間違っている可能性がありますか? 複数のエラーが予想される場合は、例外的な条件としてではなく、Observable を介してそれらのエラーをデータとして送信する必要があります。つまり、ソースで例外をキャッチし、そのメソッドIObserver<Exception>を介してに送信します。OnNext

于 2013-05-29T21:25:04.987 に答える