J'ai un dire, je m'attendais à Donc, j'ai découvert que Cependant, j'ai un autre problème: l'intervalle varie, en fonction de la dernière valeur "échantillonnée". Ce que je veux, c'est écrire un opérateur qui ressemble à ceci: p> the J'ai essayé de l'écrire, mais j'ai fini par une grande construction compliquée qui n'a pas fonctionné bien. Ma question est que je peux construire ceci à l'aide des opérateurs existants (AKA, avec une doublure one-liner)? P> P> iobservable code> qui produit des valeurs à intervalles aléatoires et je veux accélérer cette séquence. Une chose que j'ai découvert est que la définition de l'opérateur code> de «code» de l'opérateur n'est pas la même que la mienne.
papillon code> ne produit que des valeurs après l'intervalle spécifié électronique fort> avec silence fort> (il produit la dernière valeur vue). Je pensais que l'étranglement signifierait de produire des valeurs à l'intervalle spécifié (sauf s'il y a du silence, bien sûr). P>
observable.Interval (100). Sélectionnez ((_, i) => i) .throttle (200) code> pour produire (modulo toute question de performance / chronométrage) les nombres paires, car je vais l'étrangler à "demi-vitesse". Cependant, cette séquence ne produit aucune valeur du tout, car il n'y a jamais une période de silence de la longueur 200. P>
échantillon code> réellement le comportement "étranglling" que je veux.
Observable.Interval (100). Sélectionnez (((_, i) => i) .Sample (200) code> produit (à nouveau, modulo toute question de performance / chronométrage) la séquence de nombres pairs. P >
intervalleyecteur code> paramètre produit l'intervalle pour l'échantillon suivant et le premier échantillon ... est soit pris à la première valeur ou à partir d'un paramètre supplémentaire, je m'en fiche. P>
3 Réponses :
n'est pas ce que vous cherchez pour observable.frufferwithtime ? P>
BufferwithTime souffre du même défaut que les autres: l'intervalle de temps est constant. Je dois calculer combien de temps attendre de prendre le prochain échantillon de la dernière valeur échantillonnée. Je vais voir si je peux dessiner un diagramme de marbre pour cela ...
Autre heures plus tard, et avec quelques heures de sommeil, je l'ai eu. Ceci fonctionne comme je veux: Chaque fois qu'il produit une valeur x code>, Il arrête de produire des valeurs jusqu'à ce que
intervalleyecteur (x) code> passe de temps. p> p>
Je l'ai fait d'une autre manière et je voudrais le partager avec quiconque est utile.
var random = new Random(); Observable.Return(Unit.Default) .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(random.Next(1, 6)))) .TimeInterval() .Do(value => Console.WriteLine(value)) .Repeat() .Subscribe();