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