Rx应该在哪里使用?

时间:2013-04-09 20:56:21

标签: c# system.reactive actor

我正在考虑将Rx引入我的工作场所,但我越了解它越多,我认为它并没有给你带来优势。

我们有很多服务器应用程序在一端获取输入数据并在另一端输出它。这对于actor模型和“无限”线程可伸缩性来说是完美的,直到现在我已经使用ConcurrentQueues来实现消息传递,我认为Rx可能是一个更好的功能性替代方案,可以使并发性更加隐含,这有助于我移动一些从命令性代码到可观察者声明的数据流决策。

但是阅读并尝试它并没有看到使用ConcurrentQueues的常规旧线程进行消息传递的优势。 Rx给我的优势是什么?人们总是说尽管.NET 4.5使Rx过时(尽管是异步和数据流),但它仍然适合处理事件流。什么情况下呈现事件流以及如何识别它们?

2 个答案:

答案 0 :(得分:5)

如果您需要并行化某些任务,请使用TPL。

如果您需要执行异步操作,请使用Task& async/await

如果您需要接收,过滤和组合事件流,请使用Rx。请注意,Rx 不一定是异步的 - 它只是一个处理事件流的模型,就像LINQ是处理集合的模型一样。

您的用例听起来像是第一个选项。

答案 1 :(得分:1)

在SO上有很多类似的问题......

Rx完全是基于数学的异步操作组合。 TPL和“常规旧线程”是非组合的。你必须先看到非平凡的例子,然后才能看出构图对你有什么好处。

看看这个介绍Rx的介绍页面(以及其余内容),我相信你会开始了解Rx的原因: http://introtorx.com/Content/v1.0.10621.0/01_WhyRx.html#WhyRx