2010-05-14 24 views
37

¿Alguien puede explicar las diferencias entre un Observable y un ConnectableObservable? La documentación de Extensiones Rx es muy escasa y no entiendo en qué casos es útil ConnectableObservable.IConnectableObservables en Rx

Esta clase se utiliza en los métodos de Reproducción/Prunión.

Respuesta

60

Respuesta corta:

IConnectableObservable representa un pendientes caliente observable que puede ser compartido con varios suscriptores. Llamando IConnectableObservable.Connect() hace que el cambio a calientes (se suscribe a la fuente de frío observable)

Respuesta larga:

A frío observable (como Observable.Range) repeticiones de la secuencia para cada abonado. Es análogo a un cronómetro, donde a cada suscriptor se le asigna su propio cronómetro. El suscriptor inicia el cronómetro suscribiéndose, y el cronómetro se detiene (y se reinicia) una vez que el observador deja de observar.

A hot observable comparte la secuencia entre todos los suscriptores. Es análogo a que haya un cronómetro y a todos los suscriptores se les da el mismo tiempo de lectura, independientemente de cuándo comenzaron a mirar.

IObservable.Publish convierte un observable en frío en un observable en caliente, pero devuelve un IConnectableObservable. Esto permite a los suscriptores suscribirse al cronómetro (único) antes de que comience. Llamar al IConnectableObservable.Connect() inicia el cronómetro. Desechar el valor de retorno Connect() detiene el cronómetro.

Vale la pena señalar que algunas fuentes observables son calientes por naturaleza. Por ejemplo, los eventos del mouse pueden dispararse independientemente de si estamos suscritos a ellos. Todo lo observable que se pueda conectar en este escenario es compartir una suscripción a un solo evento.

Cuestiones relacionadas