RX GroupByUntil用滑动直到

时间:2017-01-10 19:47:58

标签: 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
).Subscribe(HandleGroup);

我错误地认为每次新消息到达给定组时,该组的durationSelector将重新启动,基本上等待持续时间通过而没有新消息,然后再结束该组。我意识到情况并非如此,而且无论如何,durationSelector将继续倒计时。在对每个组进行分组时,为每个组实现滑动durationSelector的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

Switch是你的朋友。

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

说明:

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