40

誰かがObservableとConnectableObservableの違いを説明できますか?Rx Extensionsのドキュメントは非常にまばらで、ConnectableObservableがどのような場合に役立つのかわかりません。

このクラスは、Replay/Pruneメソッドで使用されます。

4

1 に答える 1

64

簡潔な答え:

IConnectableObservable複数のサブスクライバーと共有できる保留中のホット オブザーバブルを表します。呼び出しIConnectableObservable.Connect()によりホットに変更されます (コールド ソース オブザーバブルにサブスクライブします)。

長い答え:

コールド オブザーバブル( など) は、各サブスクライバーのObservable.Rangeシーケンスを再生します。これは、すべてのサブスクライバーに独自のストップウォッチが与えられるストップウォッチに似ています。サブスクライバーはサブスクライブすることでストップウォッチを開始し、オブザーバーが観察を停止するとストップウォッチは停止 (およびリセット) します。

ホット オブザーバブルは、すべてのサブスクライバー間でシーケンスを共有します。これはストップウォッチが 1 つあるようなもので、いつ視聴を開始したかに関係なく、すべての加入者に同じ時間が表示されます。

IObservable.Publishコールド オブザーバブルをホット オブザーバブルに変換しますが、IConnectableObservable. これにより、サブスクライバーは開始前に (単一の) ストップウォッチをサブスクライブできます。呼び出すIConnectableObservable.Connect()と、ストップウォッチが開始されます。Connect()戻り値を破棄すると、ストップウォッチが停止します。

一部の観測可能なソースは本質的に高温であることは注目に値します。たとえば、マウス イベントは、サブスクライブしているかどうかに関係なく発生する可能性があります。このシナリオで接続可能なオブザーバブルが行うことは、単一のイベント サブスクリプションを共有することだけです。

于 2010-05-20T08:59:43.883 に答える