Rx .net主题OnNext异常正在失去下游观察者

时间:2018-12-14 17:39:07

标签: system.reactive rx.net

免责声明:我是Rx.Net的新手。

我想了解使用Rx.Net从服务器使用事件的最佳方法。当前,我有一个包含rx主题的使用者类,将使用的更新委托给下游使用者:

Event Listener/Processor:

public IObservable<IUpdate> UpdateStream => _subject?.AsObservable();

try
{
    // ... processing ... 
    _subject.OnNext(update); // update is the variable
}
catch (Exception ex)
{
    _subject.OnError(ex);
}

下游订阅者:

public void Subscribe()
{
  _eventListener.UpdateStream.Subscribe(update => 
  {
       _fooProcessor.Process(update);
  },
  ex => 
  {
     // log
     Subscribe(); // an effort to resubscribe lost subscription
  },
  () => { // log completion (optional)...}
}

我注意到主题在onNext上引发异常(已经添加了具有相同键的项),其中subject.HasObservers属性为false(换句话说,下游订阅列表丢失了)。确实出现了OnError代码行,但是下游订阅者没有收到通知(因为订阅丢失)。

我尝试使用Observer.EventPattern监听消耗事件,并​​创建可观察的对象以供下游用户使用;但这效果不佳(在这种情况下,我无法评估故障点)。

在这种情况下,是否有一种模式可以从下游使用者(在不同的dlls上)重新订阅?

感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

我发现下游订阅者引发异常,导致订阅被删除。现在这不是问题。

谢谢-How to handle exceptions in OnNext when using ObserveOn?