IObserver - 调用IObserver.OnError时观察者应该做什么

NoP*_*God 5 c# system.reactive observer-pattern

我正在使用我的项目中的IObserver/ IObservableinterfaces.

CommandReader是一个IObservable连续从流中读取数据然后将其传递给它CommandHandler IObserver的数据.

当底层流关闭(例如连接死亡)时,我将通过该IObserver.OnError(exception)方法通知观察者

观察者收到此通知时应该怎么做?它应该从观察中释放出来吗?或者是父母班的责任?

Eni*_*ity 3

对于初学者来说,您通常不应该实现自己的IObservable对象IObserver。你的问题有点暗示了原因。使潜在的行为正确是非常困难的。

现在每次调用都会IObservable.Subscribe返回一个IDisposable. 如果 的调用者希望在调用orSubscribe之前取消订阅可观察对象,则可以使用此方法。但是,如果 调用or ,则将自动处理掉。因此,当可观察集合完成时,Rx 会自动进行清理。OnCompletedOnErrorOnCompletedOnErrorIDisposable

每个单独的观察者不需要管理自己的订阅生命周期。观察者只需要响应OnCompleted/OnError消息即可。

在您的代码中,我建议您考虑稍微更改您的代码。我希望CommandReaderPublisher带有Subscribe方法的类可能比CommandReader类更合适。Rx 流完成后就无法继续使用。

我也想知道调用是否OnCompleted会比OnError(exception)底层流关闭时更好。如果发生错误那没问题,但如果它关闭那就ONCompleted更好了。