Rx如何与反应式编程相关?

时间:2013-02-08 01:29:09

标签: .net system.reactive reactive-programming

我已经读过反应式编程的基本思想,即根据源值表达式随时间变化的变量。我甚至使用了表达式implemented this。但后来我看看微软的Reactive Extensions(Rx)并看到完全不同的东西。随着时间的推移,自我更新的变量在哪里?没有人看到。只是通过事件参数枚举的一种奇特方式。

所以我的问题是:Rx真的是“反应性”的吗?我们现在看到的功能现在是未来的前奏吗?或者是微软不小心抛出一个流行词?或者我完全忽略了这一点(在这种情况下,我希望你解释一下)?

修改 我已经对Rx的描述得到了一些很好的答案,此外还有问题被关闭了。 :(但我仍然希望听到更多的内容:

  1. 在什么意义上Rx“反应”?我认为自我更新变量是这个想法的核心,但Rx不提供这些。 LINQ-to-Events似乎是Rx更好的名字。我开始认为,微软可能会滥用“反应性”一词将其应用于Rx。
  2. 当前的Rx功能可能以何种方式成为自我更新变量的前身?我已经实现了这样的功能,并没有注意到Rx为此目的有用的任何东西。

3 个答案:

答案 0 :(得分:7)

“Reactive”可能更像是一个流行语,但它确实与另一种称为“功能反应式编程”的语言概念很吻合......

无论如何, Rx “是”已被比我更聪明的人回答,但我会试一试:

  • 一开始,有事情;这些东西已经形成,被称为 POCOs

  • 形成了这些 POCO 的集合,因此它们被命名为 IEnumerable<T>

  • “但事情是什么”人们呻吟和哀嚎,“他们不适合收藏和群体!我们必须创造奇怪和外星感觉的呼叫和响应处理程序来应对他们!”

  • 就在那时TheErikTheBart和其他人看着这些奇怪的事件并想到“嘿,我们可以让他们表现得像 POCO ,因为他们只是 IEnumerable<T> !“

  • 的镜像
  • 这是 IObservable<T> 的诞生,是 IEnumerable<T> 的对偶(对于流“推送”信息到观察者,而不是观察者“拉出”项目

  • 然后我厌倦了在“创世纪模式”中写作,那些真正聪明的人捆绑了形成LINQ的相同的monadic查询逻辑以及ISchedulers的“时间旅行”能力。 1}}并称之为“Rx”

答案 1 :(得分:2)

哦,小男孩!好的。我认为这里的主要问题是词汇。 Rx通常被描述为“事件”的Linq或类似的东西,并且用称为IObservable的东西实现。

我相信刚刚开始使用Rx的每个人都会因为同样的陷阱而陷入困境。当我们看到“事件”这个词时,我们会想到关键字事件/事件处理程序等等......但是在Rx的上下文中,事件比这更常见。它是异步发生的任何事情,很可能是在另一个线程上发生的。当然,一种类型的事件是.net事件,使用Observable.FromEventPattern工厂方法创建事件处理程序有一些价值 - &gt; IObservables,因为它们的生命周期被表示为IDisposable(稍后会详细介绍)。

Rx的另一种用法是数据并行性,因为它与TPL数据流严重重叠。我用于大数据并行工作的典型模式是将其转换为Rx IObservable,然后将处理/线程行为应用为monad。

对于花哨的部分,IObservable有一个Linq提供程序,它允许您使用Linq异步处理异步进程(例如Speculative execution using the TPL)。

最后IObservable是一个不幸的名字,因为它导致大多数人将它与INPC的想法混淆,因为它看起来类似于ObservableCollection。我保证不会。

答案 2 :(得分:0)

Reactive programming基于“数据流”和“传播变化”。

有多种表达方式。 Rx框架基本上是重新审视传统的基于事件的范例,作为事件的流表示,并围绕事件提供操作。