我如何创建一个 Rx observable 来获取立即值然后采样?
How do I create an Rx observable that gets an immediate value and then samples?
我想使用 Sample 来减少项目从我的 observable 中出来的频率,但我想立即看到第一个事件通过而不会在样本持续时间内被阻止。之后我希望样本只给我一个样本间隔的项目。
我的简单示例代码是:
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);
所以我尝试使用它来让它立即生成一个项目,但是这完全停止了 observable 的工作:
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# immediate observable sample" 之类的内容,但没有任何结果,我想我使用了错误的术语,但不确定我需要什么...
有什么想法吗?
这对你有用吗?
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() 方法可确保您只注册一次活动。
我想使用 Sample 来减少项目从我的 observable 中出来的频率,但我想立即看到第一个事件通过而不会在样本持续时间内被阻止。之后我希望样本只给我一个样本间隔的项目。
我的简单示例代码是:
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);
所以我尝试使用它来让它立即生成一个项目,但是这完全停止了 observable 的工作:
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# immediate observable sample" 之类的内容,但没有任何结果,我想我使用了错误的术语,但不确定我需要什么...
有什么想法吗?
这对你有用吗?
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() 方法可确保您只注册一次活动。