c# - 如何使用 Rx.Net 编写条件样本组合器

标签 c# system.reactive

我有一种情况,我希望对可观察的样本进行采样,但在给定特定条件的情况下,我想接受每个事件。这是我的尝试,但我有一种感觉,由于不断重新订阅主序列,这是不安全的。例如,如果采样不断打开和关闭,并且主序列总是在订阅上生成一个值,那么我想我会一直收到重复的事件。

IObservable<T>
SampleMaybe<T>
    ( this IObservable<T> @this
    , IObservable<<IObservable<T>>> sample  
    )
{
    return sample
        .Select(s => s != null ? @this.Sample(s) : @this)
        .Switch();
}

最佳答案

我不确定您的 .Sample(s) 调用。我认为三元运算符的两侧最终是相同的。

话虽如此,我认为您最初的方法是可靠的,只要订阅没有副作用。这是一个维护订阅的示例,因此您甚至可以避免这种情况:

public static IObservable<T> SampleSometimes<T>(this IObservable<T> source, TimeSpan sampleTime, IObservable<bool> isSamplingOn)
{
    return source.Publish(_source => _source
        .Sample(sampleTime)
        .Publish( _sampled => isSamplingOn
            .Select(b => b? _sampled : _source)
            .Switch()
        )
    );
}

关于c# - 如何使用 Rx.Net 编写条件样本组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42899093/

相关文章:

rxjs - 如何在 RXJS 中发出不早于指定超时的事件?

C# - 确定存储过程是否存在

c# - 如何在不使用内部主题<T,U>的情况下链接变革性 ISubject<T,U>

c# - FolderBrowserDialog 取消事件 C#

c# - 在 xml 中获取属性名称和属性值

c# - 我怎样才能从队列中创建一个 IObservable,这样序列就不会在队列为空时结束?

.net-4.0 - .NET Framework 4.0 Beta2 中的 IObservable<T>

.NET Rx Koans : Why does this test case fail?

c# - .NET Timer 控件在窗口最小化时运行得更快

c# - WPF 依赖属性 - 数据绑定(bind)不起作用