.net 使用反应式扩展保留一系列事件中的最新事件,直到接收到最新事件后x秒
我试图理解如何使用反应式扩展实现以下场景。我一直在寻找的其他解决方案包括管理一系列计时器。。。我希望尽可能避免的事情 场景.net 使用反应式扩展保留一系列事件中的最新事件,直到接收到最新事件后x秒,.net,system.reactive,.net,System.reactive,我试图理解如何使用反应式扩展实现以下场景。我一直在寻找的其他解决方案包括管理一系列计时器。。。我希望尽可能避免的事情 场景 “ActionRequests”流正在发生。ActionRequest的流式处理来自不同的对象源。我只感兴趣的是,当某个特定来源的请求在x秒内停止时,我会选择最近的ActionRequest 所以把它分解。 不断从不同的对象源接收事件。 不同的对象源由guid表示-请参阅ActionRequests类 在对象源沉默x秒后,最新事件被推出。 一旦收到最近感兴趣的ActionR
“ActionRequests”流正在发生。ActionRequest的流式处理来自不同的对象源。我只感兴趣的是,当某个特定来源的请求在x秒内停止时,我会选择最近的ActionRequest 所以把它分解。
public class ActionRequest
{
public ActionRequest(Guid quoteId, DateTime now)
{
QuoteId = quoteId;
RequestTimestamp = now;
}
public Guid QuoteId { get; set; }
public DateTime RequestTimestamp { get; set; }
}
如果您对此有任何想法,我们将不胜感激。答案由Richard Hein提供
答案的简短版本如下。在RX论坛的线程中添加了一个更完整的示例
var throttled = observable.GroupBy(tar => tar.Value.QuoteId).SelectMany(g => g.Throttle(TimeSpan.FromMilliseconds(1500)));
答案由Richard Hein在中提供
答案的简短版本如下。在RX论坛的线程中添加了一个更完整的示例
var throttled = observable.GroupBy(tar => tar.Value.QuoteId).SelectMany(g => g.Throttle(TimeSpan.FromMilliseconds(1500)));
您是否真的因为某种原因需要缓冲事件,或者您只是想在x秒的“静默”后响应最新的事件,从而跳过先前的事件?这是一个好问题。实际上并不需要缓冲所有事件,只要每个QuoteId的最新事件在一段时间的沉默后被推出。我会更新观测值。节流阀应该会这样做,就像Dave在Rx论坛上说的那样。不?油门听起来应该能起作用。我希望在报价上有所区别。我在Rx论坛上更详细地回复了Dave的帖子。你是否真的因为某种原因需要缓冲事件,或者你只是想在x秒的“沉默”后响应最新的事件,从而跳过先前的事件?这是一个好问题。实际上并不需要缓冲所有事件,只要每个QuoteId的最新事件在一段时间的沉默后被推出。我会更新观测值。节流阀应该会这样做,就像Dave在Rx论坛上说的那样。不?油门听起来应该能起作用。我希望在报价上有所区别。我在Rx论坛上对Dave的帖子做了更详细的回复。