Я создал несколько быстрых тестовых кодов для этого, и, похоже, IDisposable
сохранит ссылку и удержит IObservable
в памяти. Или, по крайней мере, очень хорошо, как говорит Джейсон.
Subject<int> subject = new Subject<int>();
WeakReference wr = new WeakReference(subject);
IDisposable disposable = subject.Subscribe(i => Console.WriteLine("Next: " + i));
subject.OnNext(5);
subject.OnNext(10);
subject = null;
GC.Collect();
Console.WriteLine(wr.IsAlive ? "Subject is still alive." : "Subject is not alive.");
Когда написано, как указано выше, слабая ссылка все еще будет жива. Если я закомментирую одноразовое назначение, то subject
получает GC'ed.
/*IDisposable disposable = */ subject.Subscribe(i => Console.WriteLine("Next: " + i));