c# – 在Rx中,如何在一段时间后对最新项目进行分组?

前端之家收集整理的这篇文章主要介绍了c# – 在Rx中,如何在一段时间后对最新项目进行分组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对不起,如果标题不是很清楚,我想不出更好的……

我正在以IObservable< char>的形式接收用户输入,并且我想通过在每次用户停止输入超过1秒时对字符进行分组来将其转换为IObservable< char []&gt ;.因此,例如,如果输入如下:

h
e
l
l
o
(pause)
w
o
r
l
d
(pause)
!
(pause)

我希望输出可观察到:

['h','e','l','o']
['w','o','r','d']
['!']

我怀疑解决方案相当简单,但我找不到正确的方法……我试图使用Buffer,GroupByUntil,Throttle和其他一些方法,但无济于事.

任何想法都会受到欢迎!

编辑:我有一些几乎可行的东西:

_input.Buffer(() => _input.Delay(TimeSpan.FromSeconds(1)))
              .ObserveOnDispatcher()
              .Subscribe(OnCompleteInput);

但是每次键入新角色时我都需要重置延迟…

解决方法

如果您的来源很热,缓冲和节流就足够了.要使它变热,您可以使用.Publish().RefCount()来确保您最终只有一个订阅源.
IObservable<IList<T>> BufferWithInactivity<T>(this IObservable<T> source,TimeSpan dueTime)
{
    if (source == null) throw new ArgumentNullException("source");
    //defer dueTime checking to Throttle
    var hot = source.Publish().RefCount();
    return hot.Buffer(() => hot.Throttle(dueTime));
}
原文链接:https://www.f2er.com/csharp/99425.html

猜你在找的C#相关文章