我正在使用AsyncPattern创建一个可观察对象,我希望每隔一段时间进行一次轮询。到目前为止,我已经到了这里:
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
。
答案 0 :(得分:1)
这可能不会“合格”作为答案,但评论时间可能太长...... 叹息
我的直觉说:将超时传播为Maybe
/ Nullable
。
推理:
要发白,我会跟Timeout
调用一个Catch
来注入/返回一个“空值”(无论你定义了什么 - Maybe
,{{ 1}}等等,从而使得到的流的“形状”对任何订户都更加清晰。