Rx framework – IObservable<T>.Catch and IObservable<T>.OnErrorResumeNext

Like IObservable<T>.Concat, the IObservable<T>.Catch extension method concatenates an observable collection with another.

However, unlike the Concat method where the subscription to the second observable collection happens after the first had completed, in the Catch method the subscription to the second collection happens after and only after the first had excepted!

Which begs a very good question:

What if I want to concatenate an observable collection with another regardless of whether the first succeeds or not?

Well, the answer to that question is IObservable<T>.OnErrorResumeNext, which always subscribes to the second observable collection at the end of the first.

image

Like so many other merge-type extension methods in Rx, there are two flavours to choose from when using the Catch or OnErrorResumeNext methods. Either as extension method:


var zs = xs.Catch(ys);

var zs2 = xs.OnErrorResumeNext(ys);

or as static methods which give you the option to merge more than two observable collections:


var zs = Observable.Catch(xs, ys, us, vs);

var zs2 = Observable.OnErrorResumeNext(xs, ys, us, vs);