我正在使用IDisposableCompositeDisposable来清理ViewModels中的Reactive Extension(Rx)观察者。

在这种情况下,ViewModel中IDisposable的正确实现是什么?通常,由于没有非托管对象,因此我不会实现终结器,但是看来终结器对于捕获对Dispose的所有未接调用可能很有用,从而确保始终放置我的观察者。 (在应用程序的生命周期中实例化了我的Observable,而在ViewModels中则未实例化。)

谢谢!

更新:

需要澄清的是:在这种情况下,对Dispose的调用有所不同。 Reactive Extensions中的Observer使用Dispose使其自己从Observable退订。就我而言,我有一个长期生存的观察者,其中有许多短期生存的观察者,因此,除非由于Observable-> Observer引用而将其明确处置,否则这些观察者将不会是GC。我是Reactive Extensions的新手,所以我可能误会了。

最佳答案

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

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

关于c# - 正确实现IDisposable来清理带有长生命周期Observable的Rx Observers?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12077450/

10-12 04:50