发布()。RefCount()不起作用?

时间:2014-04-28 07:59:13

标签: c# system.reactive

我有一个温和的,昂贵的'计算通过IObservable属性公开。

如果有多个订阅者,我想保护它不被多次运行,所以我在它后面放了一个Publish()。RefCount(),但当我坚持使用断点时,我仍然看到它被调用了两次。

public IObservable<int> Property
{
    get { return _Source.Select(Expensive).Publish().RefCount(); }
}

1 个答案:

答案 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()