gpt4 book ai didi

c# - 无论 TimeSpan 或计数如何,Reactive Extensions Buffer 每次都会执行

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

我正在创建和搜索文本,并希望我的应用程序每 2 秒或当文本框中至少有 3 个字符时执行搜索。

我正在尝试使用 Reactive Extension 的缓冲区或限制来实现相同的目的。但是我可能不清楚这两种方法是如何工作的。我正在尝试的代码是

var observableSequence = SearchQueryText.ToObservable();
observableSequence.Buffer(TimeSpan.FromSeconds(2),3).Subscribe(u =>
{
PerformSearch();
});

对我来说,这些方法既不会等待 2 秒,也不会停止 Buffer 以获取至少三个字符。

但是在缓冲区的情况下,如果我使用“u”来检查计数或平均值,那么它会返回正确的值。

我只想让这些方法等待 TimeSpan 中指定的时间或等待字符达到指定长度。

最佳答案

缓冲区通过在达到计数限制或时间跨度已过时传播结果来工作。

你可能想要这样的东西:

 observableSequence
.Where(x => x.Length > 2)
.DistinctUntilChanged()
.CombineLatest(Observable.Timer(TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(2)), (a, b) => a)
.Subscribe(x => Console.WriteLine(x), ex => Console.WriteLine(ex));

这将每 2 秒使用满足长度标准的最新搜索词执行一次搜索。在至少有 1 个正确长度的搜索词之前,它不会执行任何操作。这就是你想要的吗?

或者您只是想确保搜索的执行频率不超过每 2 秒一次?

在这种情况下:

sequenceObservable
.Where(x => !string.IsNullOrEmpty(x))
.Where(x => x.Length > 2)
.Throttle(TimeSpan.FromSeconds(2))
.DistinctUntilChanged()

关于c# - 无论 TimeSpan 或计数如何,Reactive Extensions Buffer 每次都会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096880/

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