定期的にポーリングを続けたい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。