System.reactive 在反应式扩展中创建优先级流并忽略第二个流
我有两个观测点,它们各自做着不同的事情。我希望第二个流忽略它的输入,如果它们的第一个流在某个时间间隔内收到了一些数据,比如说500毫秒。我该怎么做呢System.reactive 在反应式扩展中创建优先级流并忽略第二个流,system.reactive,System.reactive,我有两个观测点,它们各自做着不同的事情。我希望第二个流忽略它的输入,如果它们的第一个流在某个时间间隔内收到了一些数据,比如说500毫秒。我该怎么做呢 var s1 = new Subject<string>(); var s2 = new Subject<string>(); s1.Subscribe(x => Debug.Write(x)); //Subscribe something slightly different s2.
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
*/
var s1=新主题();
var s2=新主题();
s1.Subscribe(x=>Debug.Write(x));
//订阅稍有不同的东西
订阅(x=>Debug.WriteLine(x));
s1.OnNext(“foo”);
睡眠(500);
s2.OnNext(“酒吧”);
/*预期产出:
*foobar/r/n
*/
s1.OnNext(“泡沫”);
s2.OnNext(“嗡嗡声”);
/*预期产出:
*起泡
*/
谢谢 每当
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));
每当
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));
这是个好办法,这是个好办法。