Например, рассмотрим следующее:
public IDisposable Subscribe<T>(IObserver<T> observer)
{
return eventStream.Where(e => e is T).Cast<T>().Subscribe(observer);
}
eventStream
— это долгоживущий источник событий. Недолговечный клиент будет использовать этот метод для подписки на некоторый период времени, а затем откажется от подписки, вызвав Dispose
для возвращенного IDisposable
.
Однако, несмотря на то, что eventStream
все еще существует и должен храниться в памяти, этим методом было создано 2 новых IObservables
— один, возвращенный методом Where( )
метод, который предположительно хранится в памяти eventStream
, и метод, возвращаемый методом Cast
, который предположительно хранится в памяти возвращенным методом Where()
.
Как будут очищаться эти «промежуточные IObservables» (есть ли для них лучшее название?)? Или они теперь будут существовать в течение всего времени существования eventStream
, даже если у них больше нет подписок и никто другой не ссылается на них, кроме их источника IObservable
, и поэтому у них больше никогда не будет подписок?
Если их очистить, сообщив родителю, что у них больше нет подписок, как они узнают, что никто другой не взял на них ссылку и может в какой-то момент позже подписаться на них?