在反应式扩展中创建优先级流并忽略第二个流



我有两个可观察量,它们各自做一些不同的事情。 我希望第二个流忽略其输入,如果他们的第一个流在某个时间间隔内收到了一些数据,比如说 500 毫秒。 我将如何做到这一点?

var s1 = new Subject<string>();
var s2 = new Subject<string>();
s1.Subscribe(x => Debug.Write(x));                
//Subscribe something slightly different
s2.Subscribe(x => Debug.WriteLine(x));

s1.OnNext("foo");
Thread.Sleep(500);
s2.OnNext("bar");
/* Expected output:
    * foobar /r/n
    */
s1.OnNext("fizz");
s2.OnNext("buzz");
/* Expected output:
* fizz
*/

谢谢!

这将在每次生成值s1启动计时器。 每当该计时器运行时,它将取消订阅s2并在计时器到期时重新订阅:

var delay = TimeSpan.FromMilliseconds(500);
var s2lowPriority = s1
    .Select(_ => Observable.Timer(delay).SelectMany(_ => s2))
    .StartWith(s2)
    .Switch();
s2lowPriority.Subscribe(x => Debug.WriteLine(x));

相关内容

  • 没有找到相关文章

最新更新