【问题标题】:onError not working in subscribe observable c#onError 在订阅 observable c# 中不起作用
【发布时间】:2020-05-10 15:40:12
【问题描述】:

我有这个代码(来自sample code的示例源代码)

我稍微修改了这段代码,以获取带有 onError 的异常,例如:

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

如何设置 onError 异常?

【问题讨论】:

  • 仅供参考,这里的onError 是为了捕获source 发出的异常错误,而不是你的回调onNext
  • 当我在 onNext 操作时,source 会发生什么预期?
  • 如何在没有 try/catch 和 if 的情况下处理 onNext 异常?

标签: c# reactive-programming


【解决方案1】:

这里的onError 应该捕获source 发出的异常错误,而不是你的回调onNext

我想说onNext 中的try ... catch 是这里的常用方法,尽管您想在onError 中重用错误处理是可以理解的。

如果你想在这里强制使用这种模式,你可以做的是将你的 observable 传递给另一个执行你想要捕获的代码的对象,例如 Do,然后订阅结果 observable。

类似:

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

相关问答:How to handle exceptions in OnNext when using ObserveOn? (我不认为这是完全重复的,但有一部分与这个问题重叠,IMO)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2017-11-26
    • 1970-01-01
    • 2019-05-14
    • 2021-03-02
    • 2023-04-09
    • 2020-10-06
    • 2021-05-17
    相关资源
    最近更新 更多