Можно IObservable.Catch продолжить с той же наблюдаемой - PullRequest
3 голосов
/ 22 июля 2011

Предположим, у вас есть IObservable:

IObservable<long> obs = ...;

Могу ли я сделать следующее, чтобы гарантировать, что наблюдаемое никогда не остановится?

IObservable<long> resilientObs = obs.Catch(obs);

Итак, когда ловится исключение, продолжайте с той же последовательностью, которая сгенерировала исключение.

1 Ответ

3 голосов
/ 23 июля 2011

Вы можете сделать это только с холодной наблюдаемой (т.е. наблюдаемой, которая каждый раз возвращает новую последовательность)

obs.Retry();

Но даже тогда вы не «возобновляете» наблюдаемую, выпросто перезапустите его.

Если вы хотите сохранить постоянное соединение (скажем, веб-сокет, который прерывается из-за ошибки), вам нужна заводская функция + Задержка:

Observable.Defer(() => createNewObservable())
    .Retry();

Чтобы дать вам лучший совет, вы должны рассказать нам, что такое obs и что вы пытаетесь сделать.

...