gpt4 book ai didi

c# - .NET ReactiveExtension 观察器未捕获 OnError 中的错误

转载 作者:太空狗 更新时间:2023-10-29 23:14:14 27 4
gpt4 key购买 nike

当使用 ReactiveExtension Observer 时,异常不会被 onError Action 捕获。使用下面的示例代码而不是捕获异常“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);

我是否遗漏了 observables 应该如何处理异常?

如果我在 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 操作捕获异常?

最佳答案

只有在 observable 中引发异常才会被捕获。如果它们在 observer 中出现,那么您必须自己捕捉它们。

出于多种原因,这是有道理的:

  1. 如果您有多个观察者连接到一个热观察者,那么您不希望流被终止,因为其中一个观察者做错了什么。
  2. 您不希望其他观察者知道其他观察者的工作
  3. 如果一个观察者在另一个观察者成功处理一个值后抛出异常,但在下一个观察者观察到它之前,您可能会处于不一致状态。

关于c# - .NET ReactiveExtension 观察器未捕获 OnError 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28595564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com