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);


Yan Cui

I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.

You can contact me via Email, Twitter and LinkedIn.

Hire me.