如何创建一个获取即时值然后采样的 Rx 可观察量
本文关键字:采样 然后 Rx 观察 获取 创建 何创建 一个 | 更新日期: 2023-09-27 17:55:30
我想使用 Sample 来减少从可观察对象中出来的项目的频率,但我想立即看到第一个事件通过,而不会在采样持续时间内被耽搁。之后,我希望样本只在样本间隔上给我一个项目。
我为简单示例编写的代码是:
var sampler = Observable
.Interval(TimeSpan.FromSeconds(2))
.Select(_ => Unit.Default);
var seq = Observable.FromEventPattern<IntEventArgs>(h => _eventSource.Happened += h, h => _eventSource.Happened -= h)
.Sample(sampler);
所以我试图使用它来让它立即生成一个项目,但这完全停止了可观察的工作:
var seq = Observable.FromEventPattern<IntEventArgs>(h => _eventSource.Happened += h, h => _eventSource.Happened -= h)
.Sample(Observable.Return(Unit.Default).Concat(sampler));
然后我想问题可能是采样器的 Unit.Default 部分,所以我尝试摆脱它,但现在这给出了编译器错误:
var sampler = Observable
.Interval(TimeSpan.FromSeconds(2));
var seq = Observable.FromEventPattern<IntEventArgs>(h => _eventSource.Happened += h, h => _eventSource.Happened -= h)
.Observable.Return(Unit.Default).Concat(sampler);
我尝试在谷歌上搜索"c# 即时可观察示例"之类的东西,但没有任何显示,我想我使用了错误的术语,但不确定我需要什么......
有什么想法吗?
这对你有用吗?
var observable = Observable.Merge<IntEventArgs>(h => _eventSource.Happened += h,
h => _eventSource.Happened -= h)
.Publish()
.RefCount();
var seq = Observable.Merge<IntEventArgs>(observable.FirstAsync(),
observable.Skip(1).Sample(sampler));
Publish() 方法确保只注册一次事件。