Что должно произойти, если я брошу исключение в свой обратный вызов подписки на наблюдаемый?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Что должно произойти, если я брошу исключение в свой обратный вызов подписки на наблюдаемый?

Сообщение Anonymous »

Я использую последнюю версию реактивных расширений и столкнулся с проблемой дизайна:

Что произойдет, если я выброшу исключение из переданного делегата на подписку?

С помощью проверки исходного кода я обнаружил:
  • < li>Субъекты будут игнорировать исключение.
  • Операторы, производные от Producer (например, как Где) удаляют подписку по мере прохождения через них исключения.
Итак, конечно, я находил это где угодно Я передаю наблюдаемое через стандартный оператор RX, любое исключение приводит к тому, что мои события тут же останавливаются из-за удаления. По крайней мере, если я не подпишусь повторно.

Это заставляет меня усомниться в своем дизайне. Разве это плохая идея — создавать исключения для моих делегатов? Очевидно, команда RX так думает. (Хотя я сомневаюсь, что молчаливое избавление от «плохой» подписки — правильный путь.)

Однако, глядя на свой дизайн, я не понимаю, почему это проблема. У меня выполняются некоторые защищенные операции, я запускаю некоторые OnNext для уведомления слушателей (мы полностью перешли от событий старой школы .NET к Observables), если там что-то пойдет не так, он будет выбрасывать стек, пока не достигнет обработчика. . В моем случае обработчик откатывает транзакцию, над которой он работает, что также уведомляет слушателей об откате. Все безопасно, работает нормально. По крайней мере, он работает нормально без Dispose, происходящего в базе производителей оператора Where.

Идем немного дальше... разве это противоречиво, что субъект и одноранговые узлы не делают этого? такое поведение? А для наших собственных объектов ISubject и наблюдаемых операторов, которые мы здесь написали, следует ли нам использовать такое же поведение при удалении исключений?

Я с нетерпением жду любых идеи!

Подробнее здесь: https://stackoverflow.com/questions/193 ... r-an-obser
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»