Perché i soggetti non sono consigliati nelle estensioni reattive .NET?

Attualmente sto prendendo confidenza con il framework Reactive Extensions per .NET e sto lavorando a mio modo attraverso le varie risorse introduttive che ho trovato (principalmente http://www.introtorx.com )

La nostra applicazione coinvolge un certo numero di interfacce hardware che rilevano i frame di rete, questi saranno i miei IObservable, quindi ho una varietà di componenti che consumeranno quei frame o eseguiranno una sorta di trasformazione sui dati e produrranno un nuovo tipo di frame. Ci saranno anche altri componenti che hanno bisogno di visualizzare ogni n’th frame, per esempio. Sono convinto che Rx sarà utile per la nostra applicazione, tuttavia sono in difficoltà con i dettagli di implementazione per l’interfaccia IObserver.

La maggior parte (se non tutte) delle risorse che ho letto mi hanno detto che non dovrei implementare l’interfaccia IObservable da solo, ma usare una delle funzioni o classi fornite. Dalla mia ricerca sembra che la creazione di un Subject mi fornisca ciò di cui ho bisogno, avrei il mio thread singolo che legge i dati dall’interfaccia hardware e quindi chiama la funzione Subject dell’istanza Subject . I diversi componenti IObserver riceveranno quindi le loro notifiche da tale Oggetto.

La mia confusione proviene dal consiglio fornito nell’appendice di questo tutorial in cui si dice:

Evitare l’uso dei tipi di sobject. Rx è effettivamente un paradigma di programmazione funzionale. L’uso di soggetti significa che ora stiamo gestendo lo stato, che è potenzialmente mutevole. Affrontare allo stesso tempo sia lo stato mutante che la programmazione asincrona è molto difficile da ottenere. Inoltre, molti degli operatori (metodi di estensione) sono stati scrupolosamente scritti per garantire il mantenimento di una durata corretta e coerente delle sottoscrizioni e delle sequenze; quando presenti dei soggetti, puoi rompere questo. Le versioni future potrebbero anche vedere un significativo peggioramento delle prestazioni se si utilizzano esplicitamente dei soggetti.

La mia applicazione è abbastanza critica dal punto di vista delle prestazioni, ovviamente sto testando le prestazioni dell’utilizzo dei pattern Rx prima che entrino nel codice di produzione; tuttavia sono preoccupato che sto facendo qualcosa che è contrario allo spirito del framework Rx usando la class Subject e che una versione futura del framework danneggerà le prestazioni.

C’è un modo migliore di fare ciò che voglio? Il thread di interrogazione hardware verrà eseguito continuamente se ci sono degli osservatori o meno (il buffer HW eseguirà il backup in caso contrario), quindi questa è una sequenza molto calda. Devo quindi passare i frame ricevuti a più osservatori.

Qualsiasi consiglio sarebbe molto apprezzato.