我想创建一个序列,每当源序列发出值时都会发出一个值(假设说'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);
这给了我:
真 真 真 假 真 真 假