我发现自己经常想使用Publish().RefCount()
来"保护我的资源"。
例如,当将一些传入的IObservablejson转换为两个IObservable属性时:
var anon = source.Select(TranslateToAnonObject);
this.Xs = anon.Select(GetXFromAnonObject);
this.Ys = anon.Select(GetYFromAnonObject);
为了避免执行两次翻译,我很想在anon定义后面放一个Publish().RefCount()
。
这两个属性值也是一样的,以避免为每个订阅者分别执行Get..
函数。
问题是,它已经到了这样的地步,我真的看不到很多情况下我不会想要这样。但如果这是正确的,它肯定是Rx中的默认值。我想错了什么?
(思考:这是因为我几乎只处理"热"可观测性吗?)
您经常想要这样做。事实上,我写了一篇关于这一点的文章。它不是默认值的原因很简单,因为它不是一直需要的(而且比关闭更容易省略);在许多情况下,它只是增加了开销,而且在很多情况下,需要具有连接控制的Publish(),因为订阅者数量可能会降至零,重新订阅会产生意想不到的副作用,尤其是(正如您所说)在处理冷可观察性时。