Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用反应式扩展保留一系列事件中的最新事件,直到接收到最新事件后x秒_.net_System.reactive - Fatal编程技术网

.net 使用反应式扩展保留一系列事件中的最新事件,直到接收到最新事件后x秒

.net 使用反应式扩展保留一系列事件中的最新事件,直到接收到最新事件后x秒,.net,system.reactive,.net,System.reactive,我试图理解如何使用反应式扩展实现以下场景。我一直在寻找的其他解决方案包括管理一系列计时器。。。我希望尽可能避免的事情 场景 “ActionRequests”流正在发生。ActionRequest的流式处理来自不同的对象源。我只感兴趣的是,当某个特定来源的请求在x秒内停止时,我会选择最近的ActionRequest 所以把它分解。 不断从不同的对象源接收事件。 不同的对象源由guid表示-请参阅ActionRequests类 在对象源沉默x秒后,最新事件被推出。 一旦收到最近感兴趣的ActionR

我试图理解如何使用反应式扩展实现以下场景。我一直在寻找的其他解决方案包括管理一系列计时器。。。我希望尽可能避免的事情

场景
“ActionRequests”流正在发生。ActionRequest的流式处理来自不同的对象源。我只感兴趣的是,当某个特定来源的请求在x秒内停止时,我会选择最近的ActionRequest

所以把它分解。
  • 不断从不同的对象源接收事件。
  • 不同的对象源由guid表示-请参阅ActionRequests类
  • 在对象源沉默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的帖子做了更详细的回复。