gpt4 book ai didi

c# - IObserver -- 当 IObserver.OnError 被调用时,观察者应该做什么

转载 作者:太空狗 更新时间:2023-10-29 23:32:45 25 4
gpt4 key购买 nike

我在我的一个项目中使用了 IObserver/IObservable 接口(interface)。

CommandReader 是一个 IObservable,它不断从流中读取数据,然后将其传递给它的 CommandHandler IObserver(s).

当底层流关闭时(例如连接终止),我将使用 IObserver.OnError(exception) 方法通知观察者

观察者收到这个通知应该怎么办?它应该从 observable 中释放自己吗?或者这是父类的责任?

最佳答案

对于初学者,您通常不应该实现自己的IObservableIObserver 对象。你的问题有点暗示为什么。很难使底层行为正确。

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

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

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

我还想知道在底层流关闭时调用 OnCompleted 是否会比 OnError(exception) 更好。如果发生错误,那很好,但如果它关闭,则 ONCompleted 可能会更好。

关于c# - IObserver -- 当 IObserver.OnError 被调用时,观察者应该做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com