我有一个温和的,昂贵的'计算通过IObservable属性公开。
如果有多个订阅者,我想保护它不被多次运行,所以我在它后面放了一个Publish()。RefCount(),但当我坚持使用断点时,我仍然看到它被调用了两次。
public IObservable<int> Property
{
get { return _Source.Select(Expensive).Publish().RefCount(); }
}
答案 0 :(得分:10)
只有 您需要一个支持字段,您可以确保只定义一次: (或者)Publish().RefCount()
的结果是“受保护的”,而不是您的来源 - 因为如果您有多次调用您的媒体资源,您将获得多个独立的'受保护'可观察对象 - 每个private IObservable<int> _Property;
public IObservable<int> { get { return _Property; } }
//elsewhere:
_Property = _Source.Select(Expensive).Publish().RefCount()
public IObservable<int> { get; private set; }
//elsewhere:
_Property = _Source.Select(Expensive).Publish().RefCount()