Sto iniziando lo sviluppo con estensioni Reactive (versione 2.1, per ogni evenienza) e per la mia applicazione di esempio ho bisogno di una sequenza di valori int spinti con un certo intervallo , cioè ogni 1 secondo.Come incollare il ritardo relativo nella sequenza osservabile con Rx (Estensioni reattive)
So che posso creare una sequenza con Observable.Range<int>(0,10)
ma non riesco a capire come impostare il tempo relativo tra le spinte. Ho provato Delay()
ma sposta la sequenza solo una volta all'inizio.
Ho poi trovato Observable.Generate()
metodo che potrebbe essere adattato a questo compito in modo seguente:
var delayed = Observable.
Generate(0, i => i <= 10, i => i + 1, i => i,
i => TimeSpan.FromSeconds(1));
Ma che sembra funzionare solo per semplice 'for-each-like' sequenze definite. Quindi, in generale, la mia domanda è, se siamo in grado di ottenere qualsiasi sequenza sorgente e avvolgerla con qualche proxy che estrae i messaggi dall'origine e lo spinga ulteriormente con un ritardo temporale?
S--d1--d2--d3--d4--d5-|
D--d1-delay-d2-delay-d3-delay-d4-delay-d5-|
P.S. Se questo approccio è in contraddizione con il concetto di ReactiveExtensions, si prega di notare anche questo. Non voglio farlo "con tutti i mezzi" e in futuro otterranno altri problemi di progettazione.
P.P.S idea generale è di assicurarsi che sequenza uscita ha un intervallo specificato tra eventi nonostante se la sequenza di ingresso è finita o infinita e come spesso si spinge eventi.
Grazie per la risposta. L'hack con Zip() funziona quasi bene. Una pecca qui, è se la sequenza di 'input' è infinita e imprevedibile di tempo (cioè l'evento di clic del pulsante). Con esso, se il pulsante non è stato cliccato per - diciamo 10 secondi - non ci sono stati eventi in "input", ma la sequenza "timer" ha prodotto 10 eventi. Quindi se inizio a fare clic sul pulsante velocemente, tutti i nuovi eventi da "input" vengono compressi a coppie con gli eventi esistenti da "timer", quindi anche la sequenza "result" verrà tirata con la velocità di "input", che non è quella che volere. – Antonio
Aggiungerei check come: _in nuovo evento 't_i' in' timer', controlla se c'è un evento in 'input' e rilascia' t_i' se non ci sono. – Antonio
Il bit su come fare clic su un pulsante è tutto notizie per me :) Non era nella tua domanda. Forse puoi riformulare il problema esclusivamente in termini di dati reali coinvolti e esperienza utente desiderata? –