对不起,如果标题不是很清楚,我想不出更好的……
我正在以IObservable< char>的形式接收用户输入,并且我想通过在每次用户停止输入超过1秒时对字符进行分组来将其转换为IObservable< char []> ;.因此,例如,如果输入如下:
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)); }