Saat ini saya memahami kerangka kerja Ekstensi Reaktif untuk .NET dan saya sedang mengerjakan berbagai sumber pengenalan yang saya temukan (terutama http://www.introtorx.com )
Aplikasi kami melibatkan sejumlah antarmuka perangkat keras yang mendeteksi bingkai jaringan, ini akan menjadi IObservables saya, saya kemudian memiliki berbagai komponen yang akan menggunakan bingkai tersebut atau melakukan beberapa cara mengubah data dan menghasilkan jenis bingkai baru. Juga akan ada komponen lain yang perlu menampilkan setiap bingkai ke-n misalnya. Saya yakin bahwa Rx akan berguna untuk aplikasi kita, namun saya kesulitan dengan detail implementasi untuk antarmuka IObserver.
Sebagian besar (jika tidak semua) sumber daya yang telah saya baca mengatakan bahwa saya tidak boleh mengimplementasikan antarmuka IObservable sendiri, tetapi menggunakan salah satu fungsi atau kelas yang disediakan. Dari penelitian saya, tampaknya membuat a Subject<IBaseFrame>
akan memberi saya apa yang saya butuhkan, saya akan memiliki utas tunggal yang membaca data dari antarmuka perangkat keras dan kemudian memanggil fungsi OnNext dari Subject<IBaseFrame>
instance saya . Komponen IObserver yang berbeda kemudian akan menerima notifikasi dari Subjek tersebut.
Kebingungan saya datang dari saran yang diberikan di lampiran tutorial ini di mana dikatakan:
Hindari penggunaan jenis subjek. Rx secara efektif merupakan paradigma pemrograman fungsional. Menggunakan subjek berarti kita sekarang mengelola status, yang berpotensi bermutasi. Berurusan dengan status mutasi dan pemrograman asynchronous pada saat yang sama sangat sulit dilakukan dengan benar. Selain itu, banyak operator (metode ekstensi) telah ditulis dengan cermat untuk memastikan bahwa masa pakai langganan dan urutan yang benar dan konsisten dipertahankan; saat Anda memperkenalkan subjek, Anda dapat memecahkannya. Rilis mendatang mungkin juga melihat penurunan performa yang signifikan jika Anda menggunakan subjek secara eksplisit.
Aplikasi saya cukup kritis terhadap kinerja, saya jelas akan menguji kinerja penggunaan pola Rx sebelum masuk ke kode produksi; namun saya khawatir bahwa saya melakukan sesuatu yang bertentangan dengan semangat kerangka kerja Rx dengan menggunakan kelas Subjek dan versi kerangka kerja yang akan datang akan merusak kinerja.
Adakah cara yang lebih baik untuk melakukan apa yang saya inginkan? Rangkaian polling perangkat keras akan terus berjalan baik ada pengamat atau tidak (buffer HW akan mencadangkan jika tidak), jadi ini adalah urutan yang sangat panas. Saya kemudian perlu meneruskan frame yang diterima ke beberapa pengamat.
Saran apa pun akan sangat dihargai.