c# - 正确实现 IDisposable 来清理 Rx 观察者和长期存在的 Observables?

标签 c# .net mvvm system.reactive idisposable

我正在使用 IDisposableCompositeDisposable 来清理 ViewModel 中的响应式(Reactive)扩展 (Rx) 观察者。

在这种情况下,我的 ViewModel 中 IDisposable 的正确实现是什么?通常,我不会实现终结器,因为不存在非托管对象,但终结器似乎可以用于捕获任何对 Dispose 的错过调用,从而确保我的观察者始终被释放。 (我的 Observable 在应用程序的生命周期内实例化,而 ViewModel 则不然。)

谢谢!

更新:

一些澄清:在这种情况下,调用 Dispose 的需要略有不同。 Reactive Extensions 中的观察者使用 Dispose 来取消订阅 Observable。就我而言,我有一个长期观察者和许多短期观察者,因此观察者不会被GC,除非由于 Observable->Observer 引用而显式处置。我对响应式(Reactive)扩展完全陌生,所以我的理解可能是错误的。

最佳答案

您不应该使用终结器在其他托管对象上调用 Dispose() (或任何方法)。这些对象可能已经被最终确定(因为无法保证最终确定的顺序: http://msdn.microsoft.com/en-us/library/system.object.finalize(v=vs.100).aspx

由于这些对象本身是 IDisposable,因此它们的终结器(如果有的话)将负责在未对它们调用 Dispose() 时需要完成的任何工作(假设它们已正确实现)。

关于c# - 正确实现 IDisposable 来清理 Rx 观察者和长期存在的 Observables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077450/

相关文章:

c# - 有没有办法让我的 switch/case 进入 C# 中的下一个 case?

c# - ASP.Net MVC 生成 DNS 预取标签

c# - 使用 C# 将一个 Access 数据库复制到另一个数据库

c# - 如何基于绑定(bind)列表构建包含其他控件的 WPF 控件

c# - 从 ViewMode/Viewl MVVM 发出保存模型

c# - ReactiveUI 命令并发(WebClient)

c# - 比 File.Move 更快的文件移动方法

c# - 自动按下 iframe 中的按钮

c# - 包含比 StartsWith 快?

c# - 仅当 ObservableCollection 成员不为 Null 时才绑定(bind) DataContext