【发布时间】:2019-08-08 09:05:00
【问题描述】:
这似乎应该是微不足道的,但我已经浪费了几个小时。我有一个 Observable 字符串:
S: ---a------b----------c------->
我想以某种方式将其转换为逗号分隔的字符串:
L: ---a------,b---------,c------>
注意第一项前没有逗号;这很关键。然后我可以订阅这个序列来输出一个逗号分隔的列表:
L.Subscribe(Console.Write); // "a,b,c,..."
(顺便说一句:S 很慢)。
一个明显的解决方案是创建一系列分隔符:
C: -- --,--,--,--,--,--,--,--,-->
然后我们只是压缩它们:
L = S.Zip(C, (s,c)=>c+s)
创建 C 语言很容易,对吧? C = Observable.Return("").Concat(Observable.Repeat(",")).
但我发现无限序列解决方案存在两个问题,例如重复:
- 对 L.Subscribe() 的调用阻塞。我真的不希望它阻塞。
- 感觉确实效率低下。当我们在等待 S 时,C 正在疯狂地输出值——我们扔掉了 99% 的值。我尝试用 Interval(TimeSpan.Zero) 替换重复并获得 100% 的 CPU!
解决这些无限序列问题会很棒,但我想找到一种通用方法对第一个元素进行特殊处理也是可以的。无论采用何种解决方案,都不能触及 S 的当前实现。
【问题讨论】:
标签: c# observable reactive