До сих пор я ревностно сохранял каждую ссылку на IDisposable
, возвращенный из любого метода .Subscribe(...)
, .Connect(...)
и т.д. внутри Rx. Я сделал это из-за своего опасения, что сбор мусора будет располагать одноразовым, если я не буду ссылаться на него.
Однако, я сделал тест в LINQPad, где я сделал несколько вызовов GC.Collect()
на .Subscribe(...)
, где я не сохранил ссылку и не понял, что? Мир не закончился, и подписка завершилась.
В ходе дальнейшего тестирования я обнаружил, что моя подписка была удалена сразу после .OnComplete()
без моего вмешательства.
Это приводит меня к пониманию того, что, по крайней мере, для .Subscribe(...)
, единственной причиной сохранения ссылки на подписку является принудительное завершение подписки до ее нормального завершения. Это больше похоже на токен отмены.
Итак, все ли Rx одноразовые используются для отмены, а не для сохранения?
Что же такое правила для подвешивания к IDisposable
?