2

我正在从 AsyncPattern 中制作一个 observable,我想定期对其进行轮询。到目前为止,我必须到这里:

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

我的问题是关于Materialize中间的。这(对我来说)似乎是让 TimeoutException “通过”的一种相当优雅的方式,以便订阅者可以了解它。我只是不确定我是否应该让它Notification作为Maybe/Nullable T.

4

1 回答 1

1

这可能不“有资格”作为答案,但可能太长了,无法发表评论......叹息

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

推理:

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

顺便说一句,我会在Timeout调用之后加上一个Catch注入/返回一个“空值”(定义但是你想要的 - MaybeNullable<T>等),从而使任何订阅者更清楚生成的流的“形状” .

于 2013-02-11T16:20:13.203 回答