我有两个可观察量,它们各自做一些不同的事情。 我希望第二个流忽略其输入,如果他们的第一个流在某个时间间隔内收到了一些数据,比如说 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));