Rx .net Тема OnNext исключение теряет наблюдателей вниз по течению - PullRequest
0 голосов
/ 14 декабря 2018

Отказ от ответственности: я новичок в 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);
}

Downstream-подписчики:

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 для прослушивания события потребления и создания наблюдаемого, которое будет использоваться нисходящим потоком.абоненты;но это не сработало (я не мог оценить точку отказа в этом случае).

Существует ли шаблон для повторной подписки от нижестоящих потребителей (в разных dll), в таких случаях?

Цените любую помощь.Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Я обнаружил, что нижестоящий подписчик выдавал исключение, в результате чего подписка удалялась.Теперь это не проблема.

Спасибо - Как обрабатывать исключения в OnNext при использовании ObserveOn?

...