c# - 关于使用 Publish().RefCount()

标签 c# system.reactive

我发现自己经常想使用 Publish().RefCount() 来“保护我的来源”。

例如,将一些传入的 IObservable json 转换为两个 IObservable 属性时:

var anon = source.Select(TranslateToAnonObject);
this.Xs = anon.Select(GetXFromAnonObject);
this.Ys = anon.Select(GetYFromAnonObject);

为了避免执行两次翻译,我很想在匿名定义后面放置一个 Publish().RefCount()

对于两个属性值也是一样的,以避免为每个订阅者单独执行 Get.. 函数。

事情是,它已经到了我无法真正看到很多我想要这个的地步。但如果这是正确的,它肯定会成为 Rx 中的默认值。我在想什么?

(思考:是不是因为我几乎只在处理“热门”可观察对象?)

最佳答案

您确实经常想这样做。事实上我写了一个 article在这一点上。它不是默认值的原因很简单,它不是一直都需要的(并且比关闭更容易省略);在很多情况下,它只会增加开销,并且在很多情况下需要具有连接控制的 Publish(),因为订阅者数量可能会降至零,并且重新订阅会产生意想不到的副作用,尤其是(如您所说)在处理冷可观察量时。

关于c# - 关于使用 Publish().RefCount(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393285/

相关文章:

c# - 我可以在一个项目中使用异步和同步套接字吗?

c# - 阻止并发调用者并从异步方法返回单个结果

C# Windows 媒体播放器 AxHost 错误 : Failed to create compopnent 'AxHost'

c# - react 性扩展示例或限制?

c# - 为什么SubscribeOn在这里不能作为扩展方法而是直接调用?

c# - ObserveOn 和 SubscribeOn - 工作完成的地方

c# - Entity Framework 提供者错误

c# - LINQ to SQL where 子句返回零

c# - RX : How to process n buffered items from a sequence then wait t seconds before processing the next n items?

c# - Rx.NET - 一次下载两个文件