System.reactive RX GroupByTill带滑动式Till

System.reactive RX GroupByTill带滑动式Till,system.reactive,System.reactive,我使用GroupByUntil对来自MSMQ的消息进行分组,这些消息具有特定的属性值,工作非常出色。我正在使用这个代码 observable.GroupByUntil( message => message.Source, message => message.Body, message => Observable.Timer(new TimeSpan(0,0,5)) //I thought this was sliding expiration ).S

我使用GroupByUntil对来自MSMQ的消息进行分组,这些消息具有特定的属性值,工作非常出色。我正在使用这个代码

observable.GroupByUntil(
    message => message.Source,
    message => message.Body,
    message => Observable.Timer(new TimeSpan(0,0,5)) //I thought this was sliding expiration
).Subscribe(HandleGroup);
我错误地认为,每当一条新消息到达一个给定的组时,该组的durationSelector就会重新启动,基本上是在结束该组之前等待没有新消息的持续时间过去。我意识到情况并非如此,而且durationSelector将继续倒计时,不管发生什么。在分组时为每个分组实现滑动持续时间选择器的最佳方法是什么?

是您的朋友

observable.GroupByUntil(
    message => message.Source,
    message => message.Body,
    group => group
        .Select(message => Observable.Timer(new TimeSpan(0, 0, 5)))
        .Switch() 
).Subscribe(HandleGroup);
说明:

  • 对于每条消息,创建一个计时器,在5秒后触发一次
  • 如果同一组中出现另一条消息,请删除旧计时器,然后切换到新计时器

“切换-将发射可观测项的可观测项转换为发射最近发射的可观测项的单个可观测项”哈哈哈,什么!?。对可观测算子的文本解释通常是不够的。大理石图表更有价值。