C# .NET ReactiveExtension观察器isn';t捕获OneError中的错误
使用ReactiveExtension时,onError操作不会捕获异常。使用下面的示例代码,而不是捕获异常“System.Responsive.Core.dll中发生类型为'System.ApplicationException'的未处理异常”,应用程序终止。异常似乎绕过了调用堆栈中的每个try/catchC# .NET ReactiveExtension观察器isn';t捕获OneError中的错误,c#,exception,system.reactive,C#,Exception,System.reactive,使用ReactiveExtension时,onError操作不会捕获异常。使用下面的示例代码,而不是捕获异常“System.Responsive.Core.dll中发生类型为'System.ApplicationException'的未处理异常”,应用程序终止。异常似乎绕过了调用堆栈中的每个try/catch var source = Observable.Interval(TimeSpan.FromSeconds(seconds)); var observer = Observer.Creat
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);
var source=Observable.Interval(TimeSpan.FromSeconds(seconds));
var observer=observer.Create(
l=>
{
//做点什么
抛出新的ApplicationException(“测试异常”);
},
ex=>Console.WriteLine(ex));
var subscription=来源。订阅(观察者);
我是否遗漏了异常应该如何由可观察对象处理
如果我在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);
var source=Observable.Interval(TimeSpan.FromSeconds(seconds));
var observer=observer.Create(
l=>
{
尝试
{
//做点什么
抛出新的ApplicationException(“测试异常”);
}
捕获(例外情况除外)
{
//异常可以在此处捕获并记录
控制台写入线(ex);
}
},
ex=>Console.WriteLine(ex));
var subscription=来源。订阅(观察者);
要让OneError操作捕获异常,我需要做什么?只有在可观察的中引发异常时,才会捕获异常。如果它们是在观察者中长大的,那么你必须自己抓住它们 这是有道理的,原因有很多:
最重要的是,也许,不管被观察者的温度如何,都无法处理观察者抛出的异常;e、 例如,您将无法区分错误是来自可观察者还是观察者。指定一个
onError
处理程序只会抑制有价值的诊断信息,而不会确保计算或应用程序通常处于一致状态。@DaveSexton-非常正确。