0

述語とメソッドObservableを使用してサブスクライブしています。WhereObservableExtensions.Subscribe(this, Action<T>)

サブスクライブで例外がスローされると、スタックでAction呼び出されたクラスを見ることができます。 AnonymousSafeObserverObservableAction

これは私が予想していた動作ではなく、実際に他のサブスクリプションで以前に見たものでもありません。通常、例外は呼び出し元OnNext(つまり、監視対象) に渡されたばかりです。

このクラス/動作はどのような状況で導入されますか?

4

1 に答える 1

0

OnNextオブザーバーの例外からサブスクライバーの呼び出しまでのパスであることに常に依存できるとは限りません。非同期性を導入するものはすべて、そのチェーンを壊します ( DelayObserveOnCombineLatestなど)。

とにかく、オブザーバーのOnNextハンドラーが例外をスローした場合、Rx はオブザーバーの状態が破損していると想定します。 AnonymousSafeObserverこの場合、オブザーバーがオブザーバブルからサブスクライブされないようにするだけで、メモリリークを回避し、破損したオブザーバーにさらに多くのイベントを送信し続けることを回避できます。それはフェイルファストの哲学です。

私の理解では、監視可能なものをサブスクライブするたびに、これらのいずれかが作成されます。Rx によってオブザーバブルに対して行われた内部サブスクリプションは、内部オブザーバーの実装が例外をスローしないことが既に保証されているため、このクラスを使用しません。しかし、それらは外部のオブザーバー (つまり、あなたのオブザーバーと私のオブザーバー) を信頼できないものとして扱い、それらをこれらのオブジェクトの 1 つにラップするためです。

于 2013-07-29T21:38:21.517 に答える