RX - Gruppen- / Stapel-Bursts von Elementen in einer beobachtbaren Reihenfolge

Ich habe eine beobachtbare Sequenz. Wenn das erste Element eingefügt wird, wirdIch möchte einen Timer starten und anschließend eingefügte Elemente während der Zeitspanne des Timers stapeln. Der Timer startet dann erst wieder, wenn ein anderes Element in die Sequenz eingefügt wurde.

So etwas in der Art:

--------|=====timespan====|---------------|=====timespan====|-------------->
        1  2 3 4    5                     6 7            8

would produzieren:

[1,2,3,4,5], [6,7,8] 

Ich habe es mit Observable.Buffer () und einer Zeitspanne versucht, aber aus meinen Experimenten kann ich erkennen, dass der Timer gestartet wird, sobald wir die beobachtbare Sequenz abonnieren. Sobald der vorherige Timer abgeschlossen ist, wird er neu gestartet.

Wenn ich also die gleiche Sequenz wie im vorherigen Beispiel habe und den Buffer () mit einer Zeitspanne verwende, hätte ich ungefähr Folgendes:

|=====timespan====|=====timespan====|=====timespan====|=====timespan====|-->
        1  2 3 4    5                      6 7           8

was würde dies produzieren:

[1,2,3,4], [5], [6,7], [8]

Hier habe ich dieses Verhalten mit dem Buffer getestet:

var source = Observable.Concat(Observable.Timer(TimeSpan.FromSeconds(6)).Select(o => 1),
                               Observable.Timer(TimeSpan.FromSeconds(1)).Select(o => 2),
                               Observable.Timer(TimeSpan.FromSeconds(3)).Select(o => 3),
                               Observable.Never<int>());

Console.WriteLine("{0} => Started", DateTime.Now);
source.Buffer(TimeSpan.FromSeconds(4))
      .Subscribe(i => Console.WriteLine("{0} => [{1}]", DateTime.Now, string.Join(",", i)));

Mit der Ausgabe:

4/24/2015 7:01:09 PM => Started
4/24/2015 7:01:13 PM => []
4/24/2015 7:01:17 PM => [1,2]
4/24/2015 7:01:21 PM => [3]
4/24/2015 7:01:25 PM => []
4/24/2015 7:01:29 PM => []
4/24/2015 7:01:33 PM => []

Anyone hat eine Idee, wie das geht? Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage