gpt4 book ai didi

.net - RX运算符的更改间隔?

转载 作者:行者123 更新时间:2023-12-04 13:21:19 33 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,因为我对RX有点陌生:)

我正在采样一个事件(用于.Net 4.0的RX):

eventAsObservable.Sample(TimeSpan.FromSeconds(1))。Timestamp()。Subscribe(x => Console.WriteLine(“testing:” + x.Value.EventArgs.str));

问题是采样时间需要能够实时更改,我想我可以做一些属性来删除现有的处理程序,并在更改时创建一个新的处理程序,但是它看起来有点困惑并且更容易受到计时问题的影响。 。有没有一种方法可以简单地更改间隔?

示例:假设某人正在写一个字符串,当检测到某个序列时,您想要更改采样时间而不会丢失事件,最好不要使事件多于一次

最佳答案

我不知道更改现有采样间隔的方法,但是您可以做的是以所需的最高频率进行采样,然后使用Where子句进行过滤,该子句使用可以更改的变量。

例如:

static IObservable<T> SampleEvery<T>(this IObservable<T> source,
Func<int> multipleProvider)
{
int counter = 0;
Func<T, bool> predicate = ignored => {
counter++;
if (counter >= multipleProvider())
{
counter = 0;
}
return counter == 0;
};
return source.Where(predicate);
}

然后,您可以这样称呼它:
// Keep this somewhere you can change it
int multiple = 1;

eventAsObservable.Sample(TimeSpan.FromSeconds(1))
.SampleEvery(() => multiple)
.Timestamp()
.Subscribe(x => Console.WriteLine("testing:" +
x.Value.EventArgs.str));

现在,更改 multiple的值将更改有效采样频率。

这是一个非常丑陋的hack,但是我认为它应该可以工作。

关于.net - RX运算符的更改间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670534/

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