ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – .NET ReactiveExtension观察者未捕获OnError中的错误

2019-05-19 23:05:40  阅读:170  来源: 互联网

标签:c exception system-reactive


使用ReactiveExtension时,onError操作不会捕获异常.使用下面的示例代码而不是捕获的异常“在System.Reactive.Core.dll中发生未处理的类型’System.ApplicationException’异常”并且应用程序终止.异常似乎绕过了调用堆栈中的每个try / catch.

var source = Observable.Interval(TimeSpan.FromSeconds(seconds));
var observer = Observer.Create<long>(
    l =>
    { 
       //do something
       throw new ApplicationException("test exception");
    },
    ex => Console.WriteLine(ex));
var subscription = source.Subscribe(observer);

我错过了观察者应该如何处理异常?

如果我在onNext操作中放入try catch,则会捕获异常并且我可以记录它.

var source = Observable.Interval(TimeSpan.FromSeconds(seconds));
var observer = Observer.Create<long>(
    l =>
    { 
       try
       {
         //do something
         throw new ApplicationException("test exception");
       }
       catch(Exception ex)
       {
          //exception can be caught here and logged
          Console.WriteLine(ex);
       }
    },
    ex => Console.WriteLine(ex));
var subscription = source.Subscribe(observer);

如何通过onError操作捕获异常需要做什么?

解决方法:

只有在可观察量中出现异常时才会捕获异常.如果他们在观察者中长大,那么你必须亲自抓住他们.

这有道理,原因有很多:

>如果你有几个观察者附加到一个热的观察者,那么你不希望流被终止,因为其中一个观察者做错了.
>你不希望其他观察者知道其他观察者的运作方式
>如果在一个观察者之后抛出异常,而另一个观察者成功处理了一个值,但在下一个观察到它之前,您可能最终处于不一致状态.

标签:c,exception,system-reactive
来源: https://codeday.me/bug/20190519/1138143.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有