Rx.Net 当源序列空闲一段时间时,如何发出元素?



我想创建一个序列,每当源序列发出值时都会发出一个值(假设说'true'(。然后,当源序列空闲一段时间时,发出"false"。从本质上讲,我需要知道源序列何时"空闲"一段时间。

来源: ---1-----5-------2-------(超时(--------8-----3------> |    |      |      |               |    |  输出:---真-真----真----假------------真-真--->

实际上,我不需要重复出现真,所以这样会更好:

来源: ---1-----5-------2-------(超时(---------8-----3------> |                    |                | 输出:---真------------------假-------------真--------->

我已经看到了这个答案,但老实说,我真的不明白它是如何工作的。似乎应该有一个更简单的答案。

更糟糕的是,我确定我以前已经解决了这个确切的问题,但我不记得是怎么解决的!有人可以在这里帮忙吗?

使用Switch非常简单。试试这个:

var source = new Subject<int>();
var query =
source
.Select(x =>
Observable
.Timer(TimeSpan.FromSeconds(1.0))
.Select(y => false)
.StartWith(true))
.Switch();

query.Subscribe(Console.WriteLine);
source.OnNext(1);
Thread.Sleep(TimeSpan.FromSeconds(0.5));
source.OnNext(5);
Thread.Sleep(TimeSpan.FromSeconds(0.5));
source.OnNext(2);
Thread.Sleep(TimeSpan.FromSeconds(1.5));
source.OnNext(8);
Thread.Sleep(TimeSpan.FromSeconds(0.5));
source.OnNext(3);

这给了我:

真 真 真 假 真 真 假

相关内容

  • 没有找到相关文章

最新更新