2011-12-10 5 views
12

Ho un osservabile caldo (da un evento) che sto chiamando DistinctUntilChanged su cui avrà più abbonati che si iscriveranno in momenti diversi dopo l'osservabile è iniziato a correre e ha prodotto il suo primo valore. Gli abbonati otterranno il IObservable attraverso una proprietà sulla mia classe.Come faccio a fornire l'ultimo valore di un osservabile caldo su subscribe

Come faccio a fare in modo che ogni volta che qualcuno si iscrive all'osservabile ottenga l'ultimo valore pubblicato ma l'osservabile agisca normalmente altrimenti? Penso che potrei cercare PublishLast ma non sono sicuro se ha altri effetti collaterali.

domanda simile: How do I get an IObservable to push the newest value upon subscription? Questa è una domanda molto simile ma è da più di un anno fa e sono state apportate molte aggiunte a Rx, quindi penso che potrebbe esserci una funzione incorporata ora piuttosto che dover fare affidamento su un BehaviorSubject quindi non penso che questo è un duplicato esatto.

Modifica:Here is quello che sto effettivamente cercando di fare. C'è un commento sotto l'effettiva sequenza osservabile di cui sto parlando.

+0

Può chiarire il motivo per cui 'publish' e il' BehaviorSubject' dalla questione collegato non siano "built-in" abbastanza? Fanno esattamente quello che sembri cercare. –

risposta

8

L'altra risposta era vicina. O vuoi un oggetto ReplaySubject (1), vale a dire solo il valore di replay 1; o vuoi un BehaviorSubject. La differenza è un oggetto di comportamento richiede un valore predefinito. Ciò garantirà inoltre che l'utente riceverà sempre un valore immediatamente.

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

Per comprendere ciascuno dei soggetti controllare il mio messaggio Intro to Rx

Problemi correlati