【问题标题】:.NET Reactive framework: ReplaySubject OnError: Why does it throw the exception?.NET Reactive 框架:ReplaySubject OnError:为什么会抛出异常?
【发布时间】:2011-05-24 08:32:18
【问题描述】:

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

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

我期待它会通知所有 OnError 订阅者并将异常传递给他们,而不是它只是抛出异常,然后该异常就不会被处理。

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

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

爱丽儿

【问题讨论】:

  • 对不起,我回答了,但后来看到您指的是 .NET 版本而不是 JavaScript 版本,这使我的回答毫无用处。这就是我删除答案的原因。
  • 谢谢和抱歉。我会更清楚地说明这一点。

标签: c# .net system.reactive


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

        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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2015-12-24
      相关资源
      最近更新 更多