2011-12-10 7 views
12

Tengo un observable en caliente (de un evento) al que llamo DistinctUntilChanged que tendrá varios suscriptores que se suscribirán en diferentes momentos después de que el observable haya comenzado a funcionar y produjo su primer valor. Los suscriptores obtendrán el IObservable a través de una propiedad en mi clase.¿Cómo proporciono el último valor de un elemento observable en caliente? Suscríbase

¿Cómo hago para que cada vez que alguien se suscriba al observable obtengan el último valor publicado pero el observable actúa normalmente de lo contrario? Creo que podría estar buscando PublishLast pero no estoy seguro si tiene otros efectos secundarios.

Pregunta similar: How do I get an IObservable to push the newest value upon subscription? Esta es una pregunta muy similar, pero es de hace más de un año y se han realizado muchas adiciones a Rx, así que creo que podría haber una función incorporada ahora en lugar de tener que confiar en un BehaviorSubject, así que no creo que esto es un duplicado exacto.

Editar:Here is lo que estoy tratando de hacer. Hay un comentario debajo de la secuencia observable real de la que estoy hablando.

+0

Se puede aclarar por qué '' publish' y la BehaviorSubject' de la cuestión vinculada no se "built-in" suficiente? Hacen exactamente lo que pareces estar buscando. –

Respuesta

8

La otra respuesta fue cerrada. O desea un ReplaySubject (1), es decir, solo el valor de la repetición 1; o quieres un BehaviorSubject. La diferencia es que un sujeto de comportamiento requerirá un valor predeterminado. Esto también garantizará que el suscriptor siempre obtenga un valor de inmediato.

var replay1 = source.Replay(1); 
replay1.Connect(); 
//Or 
var alwaysHaveValue = source.Multicast(new BehaviorSubject<int>(-1)); 

comprender cada uno de los sujetos revise mi Intro to Rx posterior

Cuestiones relacionadas