c# – 在Rx中,如何在一段时间后对最新项目进行分组?
发布时间:2020-12-15 07:45:37 所属栏目:百科 来源:网络整理
导读:对不起,如果标题不是很清楚,我想不出更好的…… 我正在以IObservable char的形式接收用户输入,并且我想通过在每次用户停止输入超过1秒时对字符进行分组来将其转换为IObservable char []gt ;.因此,例如,如果输入如下: hello(pause)world(pause)!(pause) 我希
对不起,如果标题不是很清楚,我想不出更好的……
我正在以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)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |