gpt4 book ai didi

.net - 如何在 RX 中实现超时缓冲

转载 作者:行者123 更新时间:2023-12-03 15:10:10 24 4
gpt4 key购买 nike

我需要实现一个事件处理,当一段时间内没有新事件到达时延迟完成。 (当文本缓冲区更改时,我必须排队解析任务,但我不想在用户仍在键入时开始解析。)

我是 RX 的新手,但据我所知,我需要 BufferWithTime 和 Timeout 方法的组合。我想这是这样工作的:它缓冲事件,直到在后续事件之间的指定时间段内定期收到它们。如果事件流中存在间隙(长于时间跨度),它应该返回传播到目前为止缓冲的事件。

看看Buffer和Timeout是怎么实现的,大概可以实现我的BufferWithTimeout方法(如果大家有的话,请分享给我),不知道是不是结合现有的方法就可以实现。有任何想法吗?

最佳答案

这是一个相当古老的问题,但我相信以下答案值得一提,因为所有其他解决方案都迫使用户手动订阅、跟踪更改等。

我提供以下作为“Rx-y”解决方案。

var buffers = source
.GroupByUntil(
// yes. yes. all items belong to the same group.
x => true,
g => Observable.Amb<int>(
// close the group after 5 seconds of inactivity
g.Throttle(TimeSpan.FromSeconds(5)),
// close the group after 10 items
g.Skip(9)
))
// Turn those groups into buffers
.SelectMany(x => x.ToArray());

基本上,源是窗口化的,直到根据最新窗口定义了一些可观察的。创建了一个新窗口(分组的 observable),我们使用该窗口来确定该窗口应该何时关闭。在这种情况下,我在 5 秒不活动或最大长度为 10 (9+1) 后关闭窗口。

关于.net - 如何在 RX 中实现超时缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4655437/

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