В даний час я переживаю рамки реактивних розширень для .NET, і я працюю через різні знайомі ресурси (головним чином http://www.introtorx.com )
У нашому додатку є ряд апаратних інтерфейсів, які виявляють мережеві кадри, це будуть мої IObservables, тоді у мене є різноманітні компоненти, які споживають ці кадри або виконують певну трансформацію даних і створюють новий тип кадру. Будуть також інші компоненти, яким потрібно відображати, наприклад, кожен n-й кадр. Я переконаний, що Rx стане корисним для нашого додатку, проте я бореться з деталями реалізації інтерфейсу IObserver.
Більшість ресурсів, які я читав (якщо не всі), сказали, що я не повинен сам реалізовувати інтерфейс IObservable, а використовувати одну із наданих функцій або класів. З моїх досліджень випливає, що створення Subject<IBaseFrame>
файлу забезпечить мені те, що мені потрібно, я мав би свою єдину нитку, яка зчитує дані з апаратного інтерфейсу, а потім викликає функцію OnNext мого Subject<IBaseFrame>
примірника. Потім різні компоненти IObserver отримуватимуть сповіщення від цього предмета.
Моя плутанина випливає з поради, яку наведено в додатку цього підручника, де написано:
Уникайте використання предметів. Rx є ефективно функціональною парадигмою програмування. Використання предметів означає, що ми зараз управляємо станом, який потенційно мутує. Зробити одночасно з мутуючим станом і асинхронним програмуванням дуже важко вийти. Крім того, багато операторів (методи розширення) були ретельно написані, щоб забезпечити правильне та послідовне життя підписок та послідовностей; коли ви вводите предмети, ви можете це порушити. У майбутніх випусках також може спостерігатися значне зниження продуктивності, якщо ви явно використовуєте теми.
Моя програма є досить важливою для продуктивності, я, очевидно, збираюся перевірити продуктивність використання шаблонів Rx, перш ніж перейти до виробничого коду; проте я переживаю, що роблю щось, що суперечить духу рамки Rx, використовуючи клас Subject і що майбутня версія фреймворку зашкодить продуктивності.
Чи є кращий спосіб робити те, що я хочу? Апаратний потік опитування буде працювати постійно, чи є спостерігачі, чи ні (буфер HW створить резервну копію в іншому випадку), тому це дуже гаряча послідовність. Потім мені потрібно передати отримані кадри декільком спостерігачам.
Будь-яка порада буде дуже вдячна.