我使用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模式有点像疾病,如果有一件事实现它,使用它的一切都必须实现它。
答案 0 :(得分:13)
不,你真的不需要这样做。在担心内存使用和生命周期时,请考虑处理订阅,而不是主题。