.net 给定布尔的可观测值,导出一秒钟后变为false的可观测值
我有一个可观察的布尔.net 给定布尔的可观测值,导出一秒钟后变为false的可观测值,.net,linq,system.reactive,observable,.net,Linq,System.reactive,Observable,我有一个可观察的布尔IObservable。我想导出一个新的观测值,类似于旧的观测值,但在每个真值后一秒钟插入额外的假值 例如,如果原件是 time value 0 false 2 true 5 true 8 false 新的可观察到的将是 time value 0 false 2 true 3 false 5 true 6 false 8 false 你能帮忙吗 编辑:下面是一个测试您的解决方案的示例 O
IObservable
。我想导出一个新的观测值,类似于旧的观测值,但在每个真值后一秒钟插入额外的假值
例如,如果原件是
time value
0 false
2 true
5 true
8 false
新的可观察到的将是
time value
0 false
2 true
3 false
5 true
6 false
8 false
你能帮忙吗
编辑:下面是一个测试您的解决方案的示例
Observable.Interval(TimeSpan.FromSeconds(1))
.Where(x => x % 2 == 0)
.Select(x => x % 3 != 0)
像这样的
someBoolObservable.SelectMany(x =>
Observable.Merge(
Observable.Return(x),
x ? Observable.Timer(TimeSpan.FromSeconds(1)).Select(_ => false) : Observable.Empty<bool>()));
someBoolObservable。选择many(x=>
可观察,合并(
可观察。返回(x),
x?Observable.Timer(TimeSpan.FromSeconds(1)).Select(=>false):Observable.Empty());
我不太明白。您不能创建一个延迟任务,根据原始集合创建所需集合吗?@BrianRasmussen go onDo您想更改原始集合还是基于原始集合创建新集合?在任何情况下,我都可以想象你可以简单地完成任务。延迟后继续更新原始集合或创建新集合。我更喜欢Paul的SelectMany
,而不是更直观的Merge
,因为它本质上只有一个源订阅。嘿,Paul,检查我的编辑吗?我认为“Interval”应该是“Timer”。根据我在问题中的评论,我更喜欢这种方法+1我想要一个在一定时间后生成单个值并完成的,我永远记不起5045x重载中的哪一个:)间隔始终是周期性的,带有一个arg或一个arg+调度程序的计时器是单一事件。
someBoolObservable.SelectMany(x =>
Observable.Merge(
Observable.Return(x),
x ? Observable.Timer(TimeSpan.FromSeconds(1)).Select(_ => false) : Observable.Empty<bool>()));