39 votes

IConnectableObservables dans Rx

Quelqu'un peut-il expliquer les différences entre un observable et un connectableObservable? La documentation relative aux extensions Rx est très clairsemée et je ne comprends pas dans quels cas l'utilitaire ConnectableObservable est utile.

Cette classe est utilisée dans les méthodes Replay / Prune.

62voto

Richard Szalay Points 42486

Réponse courte:

IConnectableObservable représente une attente chaud observable qui peut être partagée avec plusieurs abonnés. Appelant IConnectableObservable.Connect() provoque le changement à chaud (s'abonne à la source froide observables)

Réponse longue:

Un froid observables (comme Observable.Range) replays de la séquence pour chaque abonné. C'est comme pour un chronomètre, où chaque abonné est donnée à leur propre chronomètre. L'abonné démarre le chronomètre en vous abonnant, et le chronomètre s'arrête (et réinitialise) une fois que l'observateur s'arrête à l'observation.

Une chaude observables actions de la séquence entre tous les abonnés. C'est comme de l'existence d'un chronomètre et de tous les abonnés reçoivent la même lecture du temps, indépendamment du moment où ils ont commencé à observer.

IObservable.Publish convertit un froid observables dans une chaude observables, mais retourne une IConnectableObservable. Cela permet à l'abonné de souscrire à la (seule) chronomètre avant qu'il ne commence. Appelant IConnectableObservable.Connect() démarre le chronomètre. L'élimination de l' Connect() de la valeur de retour arrête le chronomètre.

Il est intéressant de noter que certains observables sources sont chaud par nature. Par exemple, les événements de souris peuvent incendie, indépendamment de savoir si nous sommes abonnés à eux. Tout un connectable observables ferait dans ce scénario est d'une part un seul cas d'abonnement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X