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