2013-04-09 89 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