我应该在Reactive Extensions(Rx)主题<t> </t>上调用Dispose

时间:2014-06-20 08:32:50

标签: c# .net system.reactive

我使用Reactive Extensions(Rx)主题作为C#事件的直接替代品,如下所示:

public class MyClass
{
    private Subject<string> subject;

    public IObservable<string> WhenSomethingHappened
    {
        get { return this.subject.AsObservable(); }
    }

    private void OnSomethingHappened(string something)
    {
        this.subject.OnNext(something);
    }
}

请注意,我从未在我的主题上调用OnCompleted。 MyClass应该实现IDisposable并调用this.subject.Dispose吗?这意味着使用Subject的任何实现都应该实现IDisposable。

我问的原因是IDisposable模式有点像疾病,如果有一件事实现它,使用它的一切都必须实现它。

1 个答案:

答案 0 :(得分:13)

不,你真的不需要这样做。在担心内存使用和生命周期时,请考虑处理订阅,而不是主题。