使用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操作捕获异常,我需要做什么?
答案 0 :(得分:5)
只有在可观察中引发异常时才会触发异常。如果他们是在观察者中长大的,那么你必须亲自抓住它们。
这有多种原因: