我正在从 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
.