jack wilsher
jack wilsher

Reputation: 67

onError not working in subscribe observable c#

i have this code(sample source code from sample code)

i change a little this code for get exception with onError like :

  IObservable<int> source = Observable.Range(1, 10);
        IDisposable subscription = source.Subscribe<int>(
            onNext =>
            {
                int zero = 0;                //added this code
                var div = onNext / zero;     //and this code for get execption
            },
             onError =>
            { 
                Console.WriteLine("OnError: {0}", onError.Message); // This code never runs
            });
        subscription.Dispose();

how to set exception to onError?

Upvotes: 1

Views: 1201

Answers (1)

Pac0
Pac0

Reputation: 23149

The onError here is supposed to catch exception errors emitted by source, not by your callback onNext.

I would say the try ... catch inside onNext is the usual way to go here, though it's understandable that you want to reuse your error handling in onError.

If you want to force this pattern here, what you could do is to pipe your observable to another that executes the code you want to catch, with a Do for instance, and subscribe to the result observable.

something like :

IObservable<int> source = Observable.Range(1, 10);

IDisposable subscription = source.Do(_ =>
    {
        // Here goes the code you had in your 'onNext' originally
        throw new Exception("Throw exception manually for test purposes.");
    })
    .Subscribe(
        _ => { /* nothing to do */ },
        error =>
        { 
            Console.WriteLine("OnError: {0}", error.Message);
        }
    );

Related Q&A : How to handle exceptions in OnNext when using ObserveOn? (I don't think this is an exact duplicate, but a part overlaps with this question, IMO)

Upvotes: 4

Related Questions