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.
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:
Hier ist die Implementierung von BufferUntilSubscribed
:
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%Tags und Links c# system.reactive