Я делаю наблюдаемый из AsyncPattern, который я хочу отслеживать с интервалами. До сих пор я должен здесь:Обработка таймаута изящно на Observable.FromAsyncPattern
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
) - Detect, если опрос не истекло (нет ответа) (
Timeout
) - Start снова, если он делает тайм-аут (
Repeat
) - Не переадресовывайте for new subscribers, прекратите опрос, когда абонентов больше нет (
Publish/RefCount
).
Мой вопрос об Materialize
посередине. Это (для меня), кажется, довольно элегантный способ позволить TimeoutException «пройти», чтобы подписчики могли узнать об этом. Я просто не уверен, должен ли я позволить ему вести себя как Notification
, или, возможно, переделать его в какой-то вид Maybe/Nullable T
.
Возможно (: P) не ответ, но выглядит хорошо для меня. Я коротко посмотрел на «Поймать», но не смог определить, какой Observable дать в качестве аргумента. Я забыл о 'Observable.Return' ... – Benjol
@Benjol Да, я на самом деле использовал этот подход на этом SO-ответ: http://stackoverflow.com/questions/14782742/reactive-subscription-to-event-not- прослежены по-разному-событийно-в-период-O/14785323 # 14785323 – JerKimball