こんにちは、手動でそのメソッドSubject<T>
を呼び出すと、それに基づいてすべてのサブスクリプションを破棄することをしばらく考えていました。Dispose
しかし、最近、そのようには機能しないことがわかりました。オブザーバーの内部コレクションをクリアし、それを DisposedObserver ヘルパー クラス インスタンスに置き換えるだけです。
「通常」はすべてのサブスクライバーを伝播して破棄するだけだと思っていました。後で、 がこのように設計されている理由を理解しようとして、このように設計されたいくつかの理由を推測しました。
- サブスクライバーは、サブジェクトに部分的に依存する構成である可能性があるため、処分の完全な伝播は意味がありません。すなわち。誰もが予想するように、ソースの 1 つが破棄されたからといって Merge が破棄されるわけではありません。
Subject.Dispose
Observable.Never
オブザーバー側から見たとの継続と意味的に同等です。Subject.Dispose 呼び出し元は、破棄する前にエラーまたは完了を通知したい場合は、OnComplete または OnError を呼び出すこともできます (これらは同じスコープにあるため)。
編集注:不明確な質問で申し訳ありません。私はすでにそれを使用する方法を理解しています.これはより設計上の問題でした. もっとはっきり申し上げましょう。
Rx の設計者が Dispose の動作をそのようにしたのはなぜだと思いますか?
(上記2点は私の回答試行です)