Heiße Concat in Rx

8

Observable.Concat ist eine Implementierung, die Observables verbindet, aber die zweite IObservable<T> erstellt nur dann die Subskription, wenn die erste abgeschlossen ist.

Ссылка

Gibt es eine Implementierung eines "HotConcat"? Ähnlich wie Observable.Merge , aber die Lieferreihenfolge beibehalten, zuerst die Elemente der Erstabonnemente und dann die Folgeaufträge schieben. Etwas wie:

Ich weiß, dass es möglich ist, das ReplaySubject<T> zu verwenden, aber es scheint nicht so gut zu sein, weil es Auswirkungen auf die Leistung und die Speicherauslastung hat.

    
J. Lennon 16.07.2014, 20:35
quelle

2 Antworten

6

Hier ist die Implementierung, die ich seit einiger Zeit verwende. Diese Implementierung führt einen Operator BufferUntilSubscribed ein, der ein IObservable in ein IConnectableObservable umwandelt, das beim Aufruf von Connect die Pufferung startet und die gepufferten Ergebnisse an den ersten Abonnenten liefert. Sobald der erste Teilnehmer "abgeholt" hat, stoppt die Pufferung und der Teilnehmer erhält die Live-Ereignisse, sobald sie ankommen.

Sobald Sie das haben, können Sie HotConcat als etwas wie schreiben:

%Vor%

Hier ist die Implementierung von BufferUntilSubscribed :

%Vor%     
Brandon 17.07.2014, 13:52
quelle
1

Ich kenne keine solche Kompositionsfunktion, aber Sie können eine schreiben, die Ihren Bedürfnissen entspricht.

Hier ist mein Versuch, einen zu schreiben. Es speichert Elemente nur im Speicher, bis sie einmal wiedergegeben werden. Aber ich denke, es sollte einen Weg geben, um eine sauberere Implementierung zu erreichen.

%Vor%     
Lucas Trzesniewski 16.07.2014 22:15
quelle

Tags und Links