Должен ли я вызывать Dispose для субъекта Reactive Extensions (Rx)<T>
Я использую объект 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 ответ
Решение
Нет, тебе не нужно этого делать. Когда вы беспокоитесь об использовании памяти и времени жизни, подумайте об утилизации подписок, а не тем.