无论 TimeSpan 或计数如何,Reactive Extensions Buffer 每次都会执行
Reactive Extensions Buffer Executes EveryTime irrespective of TimeSpan or count
我正在创建和搜索文本,并希望我的应用程序每 2 秒或当文本框中至少有 3 个字符时执行搜索。
我正在尝试使用 Reactive Extension 的缓冲区或限制来实现相同的目的。但是我可能不清楚这两种方法是如何工作的。我正在尝试的代码是
var observableSequence = SearchQueryText.ToObservable();
observableSequence.Buffer(TimeSpan.FromSeconds(2),3).Subscribe(u =>
{
PerformSearch();
});
对我来说,这些方法既不会等待 2 秒,也不会停止缓冲区以获取至少三个字符。
但是在缓冲区的情况下,如果我使用 "u" 检查计数或平均值,那么它 returns 正确的值。
我只想让这些方法等待 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()
我正在创建和搜索文本,并希望我的应用程序每 2 秒或当文本框中至少有 3 个字符时执行搜索。
我正在尝试使用 Reactive Extension 的缓冲区或限制来实现相同的目的。但是我可能不清楚这两种方法是如何工作的。我正在尝试的代码是
var observableSequence = SearchQueryText.ToObservable();
observableSequence.Buffer(TimeSpan.FromSeconds(2),3).Subscribe(u =>
{
PerformSearch();
});
对我来说,这些方法既不会等待 2 秒,也不会停止缓冲区以获取至少三个字符。
但是在缓冲区的情况下,如果我使用 "u" 检查计数或平均值,那么它 returns 正确的值。
我只想让这些方法等待 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()