2013-04-09 87 views
6

我正在考慮將Rx引入我的工作場所,但我越瞭解它越多,我認爲它並沒有真正給你帶來好處。應該在哪裏使用Rx?

我們有很多服務器應用程序,它們在一端輸入數據並在另一端輸出它。對於actor模型和「無限」線程可伸縮性來說,這是非常完美的,直到現在我已經使用ConcurrentQueues來實現消息傳遞,並且我認爲Rx可能是一個更好的功能替代方案,它可以使併發性更加隱含,幫助我移動一些從命令式代碼到可觀察式聲明的數據流決策。

但閱讀它並嘗試它與使用常規的舊線程與ConcurrentQueues消息傳遞沒有多大優勢。 Rx給我什麼好處?總是說盡管.NET 4.5使很多Rx過時(儘管是異步和數據流),但它仍然適用於處理事件流。什麼情況下呈現事件流,我如何識別它們?

+0

您可能會發現Netflix的使用的Rx woth的看着,它似乎對他們工作很好https://blogs.msdn.com/b/interoperability/archive/2013/02/05/netflix-solving-big-problems-with-reactive-extensions-rx.aspx – Wilka 2013-04-10 09:37:17

+0

作爲一個(非常粗略的)經驗法則,如果您正在處理單個值,請使用TPL/Task api;如果您正在處理「事件」序列(通用「某事」,而不僅僅是.net事件),請使用rx。數據流我不太熟悉,我不得不考慮這一點。 – JerKimball 2013-04-10 13:43:52

回答

4

如果您需要並行化一些任務,請使用TPL。

如果您需要執行異步操作,請使用Task & async/await

如果您需要接收,過濾和合並事件流,請使用Rx。請注意,Rx 不一定是異步的 - 它僅僅是處理事件流的模型,其方式與LINQ是處理集合的模型相同。

您的用例聽起來像是第一個選項。

1

有很多關於這樣類似的問題....

RX是所有異步操作的有關數學爲基礎組成。 TPL和「普通老線」是非組成性的。您必須先看看不平凡的例子,然後才能看到作品真正給您帶來的好處。

看看這個頁面介紹的與Rx(和它的其餘部分),我相信你會開始神交Rx之中的原因: http://introtorx.com/Content/v1.0.10621.0/01_WhyRx.html#WhyRx

+0

良好的聯繫,值得一讀,如果你不確定Rx的「目的」 – AlexFoxGill 2013-04-10 16:49:22