Ich beginne die Entwicklung mit Reactive-Erweiterungen (Version 2.1, nur für den Fall) und für meine Beispielanwendung brauche ich eine Sequenz von Int-Werten mit einem Intervall geschoben , dh alle 1 Sekunde.Wie relative Verzögerung in Observable-Sequenz mit Rx (Reaktive Erweiterungen) eingefügt werden
Ich weiß, dass ich eine Sequenz mit Observable.Range<int>(0,10)
erstellen kann, aber ich kann nicht herausfinden, wie Sie die relative Zeit zwischen Pushs einstellen. Ich habe versucht Delay()
aber verschiebt die Sequenz nur einmal am Anfang.
Ich fand dann Observable.Generate()
Methode, die für diese Aufgabe in der nächsten Art und Weise angepasst werden kann:
var delayed = Observable.
Generate(0, i => i <= 10, i => i + 1, i => i,
i => TimeSpan.FromSeconds(1));
Aber das scheint nur für einfache ‚für-jeden-like‘ definierten Sequenzen zu arbeiten. Also, im Allgemeinen ist meine Frage, ob wir eine Quellsequenz erhalten und sie mit einem Proxy umhüllen können, der Nachrichten aus der Quelle zieht und sie mit zeitlicher Verzögerung weitergibt?
S--d1--d2--d3--d4--d5-|
D--d1-delay-d2-delay-d3-delay-d4-delay-d5-|
P.S. Wenn dieser Ansatz dem Konzept von ReactiveExtensions widerspricht, beachten Sie dies bitte ebenfalls. Ich will es nicht "auf alle Fälle" machen und sie bekommen in Zukunft noch ein paar Designprobleme.
P.P.S General Idea ist sicher zu stellen, dass Ausgangssequenz zwischen den Ereignissen trotz ein bestimmtes Intervall hat, wenn die Eingangssequenz endlich oder unendlich ist und wie oft es schiebt Ereignisse.
Danke für die Antwort. Der Hack mit Zip() funktioniert fast gut. Ein Fehler ist hier, wenn die "Eingabe" -Sequenz unendlich und zeitlich nicht vorhersagbar ist (d. H. Das Ereignis von Tastenklicks). Wenn der Button nicht angeklickt wurde - sagen wir 10 Sekunden - gab es keine Ereignisse in "input", aber die "timer" Sequenz erzeugte 10 Events. Dann, wenn ich den Knopf schnell anklicke, werden alle neuen Ereignisse von "input" paarweise mit vorhandenen Ereignissen von 'timer' gezippt, folglich wird 'result'-Sequenz auch mit der Geschwindigkeit des Drückens von' input' gezogen, was nicht das ist, was ich wollen. – Antonio
Ich würde hinzufügen wie: _on neues Ereignis 't_i' in' timer', überprüfe, ob es ein Ereignis in 'input' gibt und delete' t_i' falls es nicht_ ist. – Antonio
Das bisschen über einen Knopfdruck ist alles neu für mich :) Es war nicht in Ihrer Frage. Vielleicht können Sie das Problem nur in Bezug auf die tatsächlichen Daten und die gewünschte Benutzererfahrung neu formulieren. –