同じシーケンスで繰り返される例外を飲み込む Rx オペレーターを設計することは可能ですか (再試行またはキャッチとは異なります)? 基本的に .Select(x => x) と同じですが、途中で例外を無視します。(これがガイドラインに反していることは知っています)。
2 に答える
短い答えは「いいえ」です。
少し短い答えは、あなたの前提に欠陥があるということです。これは、Observable に複数のエラーをスローさせることができず、仮定しているオペレーターが Observer になるためです。オブザーバーは、定義上、オブザーバブルに影響を与えるべきではありません (私が言ったことをハイゼンベルグに言わないでください)。
したがって、履歴を変更する必要があるため、そのような演算子は論理的に不可能です。戻って、Observable が例外をスローしないようにしてください。もちろん、Observable が Rx のルールに違反していない限り。
そうさせないでください。:) とにかく、Rxはこれを防ぐのにかなり良い仕事をします. Subject<T>
たとえば、最初の OnError の後には公開されません。
すべての Rx オペレーターはガイドラインに従います (エラーを 1 つだけ受け取ることを保証し、それから監視対象が実行されます)。したがって、Reactive ライブラリを介して作成されたオブザーバブルは、複数のエラーを許可するように誘導されることはありません。
必要なものを実現するには、独自のカスタム実装IObservable<T>
と独自のカスタム オペレーター (リアクティブ オペレーターを使用していないもの) を作成する必要があります。
しかし、それ以上の設計作業をせずにその道を進むことはお勧めしません。あなたは本当に何を達成しようとしているのか、問題のモデリングが間違っている可能性がありますか? 複数のエラーが予想される場合は、例外的な条件としてではなく、Observable を介してそれらのエラーをデータとして送信する必要があります。つまり、ソースで例外をキャッチし、そのメソッドIObserver<Exception>
を介してに送信します。OnNext