Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何创建一个Rx可观测对象,它获得一个立即值,然后进行采样?_C#_.net_System.reactive_Observable - Fatal编程技术网

C# 我如何创建一个Rx可观测对象,它获得一个立即值,然后进行采样?

C# 我如何创建一个Rx可观测对象,它获得一个立即值,然后进行采样?,c#,.net,system.reactive,observable,C#,.net,System.reactive,Observable,我想使用Sample来减少我的可观察项目出现的频率,但我想立即看到第一个事件通过,而不会在样本持续时间内延迟。之后,我希望样本只给我一个关于样本间隔的项目 我为这个简单示例编写的代码是: var sampler = Observable .Interval(TimeSpan.FromSeconds(2)) .Select(_ => Unit.Default); var seq = Observable.FromEventPattern<IntEven

我想使用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采样器=可观察
.间隔(时间跨度从秒(2))
.Select(=>Unit.Default);
var seq=Observable.FromEventPattern(h=>\u eventSource.Occessed+=h,h=>\u eventSource.Occessed-=h)
.样品(取样器);
所以我试着用这个让它立即产生一个项目,但是这会完全停止可观察的工作:

var seq = Observable.FromEventPattern<IntEventArgs>(h => _eventSource.Happened += h, h => _eventSource.Happened -= h)
        .Sample(Observable.Return(Unit.Default).Concat(sampler));
var seq=Observable.FromEventPattern(h=>\u eventSource.Occessed+=h,h=>\u eventSource.Occessed-=h)
.Sample(可观察的返回(单位默认值).Concat(取样器));
然后我想问题可能出在单元上。采样器的默认部分,所以我尝试摆脱它,但现在出现了编译器错误:

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);
var采样器=可观察
.间隔(时间跨度从秒(2));
var seq=Observable.FromEventPattern(h=>\u eventSource.Occessed+=h,h=>\u eventSource.Occessed-=h)
.可观察。返回(单位默认值)。Concat(取样器);
我试着在谷歌上搜索“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));
var observable=observable.Merge(h=>\u eventSource.occurrent+=h,
h=>\u eventSource.coursed-=h)
.Publish()
.RefCount();
var seq=Observable.Merge(Observable.FirstAsync(),
可观察。跳过(1)样品(取样器);

Publish()方法确保只向事件注册一次

你的代码在第三个
seq
declaration-
.Observable.Return(Unit.Default).Concat(sampler)末尾-没有意义。你能修好吗?的确,这就是编译器不喜欢它的原因。如果我能修复它,那么我可以回答这个问题:-/这不是一种有效的c#语法错误,但不会编译。这是无效的c#语法-你肯定可以修复它吗?啊,我没有看到尾随;。这不是问题所在-它不喜欢.Observable.Return