迄今为止,我一直在热心地保留 Rx 中任何
但是,我在 LINQPad 中进行了一些没有保留引用的
进一步测试后,我发现我的订阅在
这让我明白,至少对于
那么,所有 Rx disposables 都是用于取消而非保持存活吗?
那么,保留
.Subscribe(...)
、.Connect(...)
等方法返回的 IDisposable
引用。我这么做是因为我担心如果不保留引用,垃圾回收将会处理掉这个 disposable。但是,我在 LINQPad 中进行了一些没有保留引用的
.Subscribe(...)
的调用,调用了一些 GC.Collect()
,猜猜发生了什么?世界并没有结束,订阅顺利完成。进一步测试后,我发现我的订阅在
.OnComplete()
后立即被处理掉了,而不需要我的干预。这让我明白,至少对于
.Subscribe(...)
,保留订阅的唯一原因是强制订阅在正常完成之前结束。更像是一个取消标记。那么,所有 Rx disposables 都是用于取消而非保持存活吗?
那么,保留
IDisposable
的规则是什么?