.NET Reactive框架:ReplaySubject OnError:为什么会抛出异常?

发布于 2024-11-09 08:47:51 字数 470 浏览 0 评论 0原文

注意:我指的是 .NET 4 版本的 RX。

我一直在使用 RX 的 ReplaySubject 类。我正在调用 OnError,并以异常作为参数。

我原以为它会通知所有 OnError 订阅者并向他们传递异常,但它只是抛出异常,之后异常就不再被处理。

代码很简单,你可以看一下GitHub上的代码。 https://github.com/arielbh/CodeCommander/blob/master /CodeValue.CodeCommander/CommandBase.cs 第 117 行是 OnNext 调用。

有什么想法吗?显然我想要我期望发生的行为。 谢谢阿里尔

Note: I'm referring to the .NET 4 version of RX.

I've been using the ReplaySubject class of RX. I'm calling the OnError with an exception as the parameter.

I was expecting that it will notify all the OnError subscribers and will pass them the exception, instead it just throws the exception and after that the exception just go unhandled.

Code is very simple, you can have a look at the code on GitHub.
https://github.com/arielbh/CodeCommander/blob/master/CodeValue.CodeCommander/CommandBase.cs
Line 117 is the OnNext call.

Got any ideas? obviously I want the behavior I'm expecting to happen.
Thanks

Ariel

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里寻她 2024-11-16 08:47:51

好的,我找到了原因。
如果您没有订阅 OnError,则默认行为是抛出异常。
我不够小心,所以没有观察到引发错误的主题。

更多信息:
http://social.msdn.microsoft.com/Forums/en/rx/thread/3125094b-1ab2-4d01-8f44-fb68ef913f43

OK, I found out the cause of it.
If you are not subscribed to OnError, than the default behavior is throwing the exception.
I was not careful enough so the Subject that raises the error was no being observed.

More info:
http://social.msdn.microsoft.com/Forums/en/rx/thread/3125094b-1ab2-4d01-8f44-fb68ef913f43

十六岁半 2024-11-16 08:47:51

我也遇到了这种奇怪的行为。我创建了自己的扩展方法来获得我期望的行为。

    public static void SendOnError<T, E>(this IObserver<T> Subject, E ExceptionToSend) where E : Exception
    {
        try { Subject?.OnError(ExceptionToSend); }
        catch (E exception)
        {
            Debug.WriteLine("One or more subscribers to the subject did not implement an OnError handler. Ignoring rethrown exception: " + exception.Message);
        }
    }

I hit this strange behavior too. I created my own extension method to get the behavior I was expecting.

    public static void SendOnError<T, E>(this IObserver<T> Subject, E ExceptionToSend) where E : Exception
    {
        try { Subject?.OnError(ExceptionToSend); }
        catch (E exception)
        {
            Debug.WriteLine("One or more subscribers to the subject did not implement an OnError handler. Ignoring rethrown exception: " + exception.Message);
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文