【发布时间】:2012-08-22 16:25:21
【问题描述】:
我正在使用 IDisposable 和 CompositeDisposable 来清理我的 ViewModel 中的反应式扩展 (Rx) 观察者。
在这种情况下,我的 ViewModel 中 IDisposable 的正确实现是什么?通常,我不会实现终结器,因为没有非托管对象,但似乎终结器可能有助于捕获对Dispose 的任何未接来电,从而确保始终处置我的观察者。 (我的 Observable 在应用程序的整个生命周期内都会被实例化,而 ViewModel 则不会。)
谢谢!
更新:
一些澄清:在这种情况下,调用 Dispose 的需求略有不同。 Reactive Extensions 中的 Observer 使用 Dispose 取消订阅 Observable。就我而言,我有一个长期存在的观察者和许多短期观察者,因此观察者不会是 GC,除非由于 Observable->Observer 引用而显式处置。我对 Reactive Extensions 完全陌生,所以我的理解可能有误。
【问题讨论】:
-
这样的终结者还能做什么?
-
只需调用 Dispose(),从而确保 Observers 已从 Observable 中取消订阅。
-
如果需要清理观察者,那么他们是否不想拥有终结者而不是容器?
标签: c# .net mvvm system.reactive idisposable