2010-05-14 9 views
37

Qualcuno può spiegare le differenze tra un osservabile e un osservabile collegabile? La documentazione di Rx Extensions è molto scarsa e non capisco in quali casi sia utile ConnectableObservable.IConnectableObservables in Rx

Questa classe viene utilizzata nei metodi Replay/Prune.

risposta

60

Risposta breve:

IConnectableObservable rappresenta un attesa caldo osservabile che può essere condiviso con più abbonati. Chiamando IConnectableObservable.Connect() fa sì che il cambiamento calde (sottoscrive alla sorgente fredda osservabile)

Risposta lunga:

Un fredda osservabile (come Observable.Range) ripete la sequenza per ogni abbonato. È analogo a un cronometro, in cui ogni abbonato riceve il proprio cronometro. L'abbonato avvia il cronometro iscrivendosi e il cronometro si ferma (e si resetta) una volta che l'osservatore smette di osservare.

A osservabile a caldo condivide la sequenza tra tutti gli abbonati. È analogo al fatto che ci sia un solo cronometro e che tutti gli abbonati abbiano la stessa lettura del tempo, indipendentemente da quando hanno iniziato a guardare.

IObservable.Publish converte un osservabile freddo in un osservabile caldo, ma restituisce un IConnectableObservable. Ciò consente agli abbonati di iscriversi al cronometro (singolo) prima che inizi. Chiamando IConnectableObservable.Connect() avvia il cronometro. Smaltire il valore di ritorno Connect() arresta il cronometro.

Vale la pena notare che alcune fonti osservabili sono calde per natura. Ad esempio, gli eventi del mouse possono sparare indipendentemente dal fatto che ci si sia abbonati a loro. Tutto ciò che un osservabile collegabile farebbe in questo scenario è una condivisione di un singolo abbonamento all'evento.