gpt4 book ai didi

c# - 我如何创建一个 Rx observable 来获取立即值然后采样?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:57 25 4
gpt4 key购买 nike

我想使用 Sample 来减少项目从我的 observable 中出来的频率,但我想立即看到第一个事件通过而不会在样本持续时间内被阻止。之后我希望 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);

所以我尝试使用它来让它立即生成一个项目,但是这完全停止了 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() 方法确保您只注册一次您的事件。

关于c# - 我如何创建一个 Rx observable 来获取立即值然后采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30799128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com