Может ли IObservable.Catch продолжать работу с тем же наблюдаемым

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

IObservable<long> obs = ...;

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

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

Поэтому, когда исключение перехвачено, продолжайте с той же последовательностью, которая сгенерировала исключение.


person Ronald Wildenberg    schedule 22.07.2011    source источник


Ответы (1)


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

obs.Retry();

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

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

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

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

person Ana Betts    schedule 22.07.2011
comment
Вариант использования — это именно то, что вы описываете: сокет, который генерирует поток данных, который может быть завершен. Спасибо за ответ. - person Ronald Wildenberg; 25.07.2011