gpt4 book ai didi

c# - 在 Observable.FromAsyncPattern 上优雅地处理超时

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:25 25 4
gpt4 key购买 nike

我正在从 AsyncPattern 中创建一个可观察对象,我希望每隔一段时间对其进行一次轮询。到目前为止,我已经到了这里:

var observer = Observable.Defer(ObservableFunc)
.Concat(Observable.Empty<int>().Delay(TimeSpan.FromSeconds(_pollInterval)))
.Timeout(TimeSpan.FromSeconds(_Timeout_s))
.Materialize()
.Repeat()
.Publish()
.RefCount();
  • 在有人订阅之前不要投票(Defer)
  • 在上次响应后的给定时间重新轮询(而不仅仅是 keep blindly polling)(Concat/Delay)
  • 检测投票是否超时(无应答)(Timeout)
  • 如果确实超时,则重新开始(重复)
  • 不要重新订阅 for new subscribers , 当没有更多订阅者时停止轮询 (Publish/RefCount)。

我的问题是关于中间的Materialize。这(对我来说)似乎是一种让 TimeoutException“通过”的相当优雅的方式,以便订阅者可以知道它。我只是不确定我是否应该让它作为 Notification 继续运行,或者将它重新具体化为某种 Maybe/Nullable T

最佳答案

这可能不是“合格”的答案,但对于评论来说可能太长了……叹息

我的直觉说:将超时传播为 Maybe/Nullable .

推理:

  • 可能没有订阅者关心它未能生成值的原因是什么,他们只关心下一个值由于某种原因不可用。 (当然,我在这里做了很多假设)

也就是说,我会遵循 TimeoutCatch 打电话这将注入(inject)/返回一个“空值”(根据您的喜好定义 - MaybeNullable<T> 等),从而使结果流的“形状”对任何订阅者来说都更加清晰。

关于c# - 在 Observable.FromAsyncPattern 上优雅地处理超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814113/

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