Entre les valeurs avec Rx

Existe-t-il une méthode d’extension dans Rx pour réaliser le scénario ci-dessous?

Entre les valeurs

J’ai une valeur pour démarrer le pompage (cercles verts) et une autre valeur pour arrêter le pompage (cercles en roseau), les cercles bleus doivent correspondre aux valeurs attendues. “SkipUntil” ne fonctionnera pas).

L’implémentation utilisant LINQ ressemblerait à ceci:

public static IEnumerable TakeBetween(this IEnumerable source, Func entry, Func exit) { bool yield = false; foreach (var item in source) { if (!yield) { if (!entry(item)) continue; yield = true; continue; } if (exit(item)) { yield = false; continue; } yield return item; } } 

Comment cette même logique pourrait-elle IObservable à IObservable ?

Voici ce dont vous avez besoin comme méthode d’extension:

 public static IObservable TakeBetween( this IObservable source, Func entry, Func exit) { return source .Publish(xs => { var ensortinges = xs.Where(entry); var exits = xs.Where(exit); return xs.Window(ensortinges, x => exits); }) .Switch(); } 

L’essentiel que j’ai inclus dans ceci est l’utilisation de l’extension Publish . Dans ce cas particulier, il est important que votre source observable puisse être “chaude”, ce qui permet de partager les valeurs source sans créer plusieurs abonnements à la source.

Je pense que vous pouvez utiliser Window :

 source.Window(entrySignal, _ => exitSignal).Switch();