RxJS/Rx.Net 可观察对象的订阅与事件 - 性能/线程。

14

最近我开始使用响应式扩展(Reactive Extensions)来使用 Angular 2 中的客户端观察者(observables)。Rx 的观察者和 dotnet 的事件的概念似乎非常相似。有没有具体的例子说明一个在某些情况下适用而另一个不适用?如果没有,那么 Microsoft 引入 Rx.Net 有没有其他原因,因为观察者是响应式扩展的核心。任何链接或实时示例都可以。相对于异步/等待、任务或线程方面,它是否表现更好?我正在寻找线程/性能方面的差异。


在编程中,信号流可以被视为多次调用函数,Rx和async-await之间的核心区别在于状态。每个Rx操作符都可以保留一些状态,并对每个调用行为不同。而async-await函数则不会。你需要将状态存储在其他地方以模拟Rx操作符,但与Rx情况不同的是,它不能封装到函数本身中。 - eonil
1个回答

22

它们是不同的抽象概念。本回答中的所有内容同样适用于JavaScript和C#。

async/await 允许您异步等待单个异步操作。这个“异步操作”只能完成一次,并返回一个结果。

Observables允许您订阅数据流并对到达该流的数据做出反应。这种订阅模型允许多个数据项随时间而来。


谢谢你帮我理解它们之间的区别。但我仍然觉得,无论可观察对象的目的是什么,已经有构造体来促进这些功能。例如,Observable.subscribe和事件处理程序执行相同的操作。我是否在这里遗漏了什么或者完全错了? - Sreenath
5
@Sreenath:一点也不是。在早期,Rx通常被称为“事件的LINQ”。然而,Rx要比事件更加优越;它具有更一致和灵活的用法。我认为可观察对象本质上是事件的替代品;它们是如果今天设计事件而不是从几十年前复制设计时会是什么样子的。 - Stephen Cleary
发现了一些与上面的答案相辅相成的链接,提供了一些示例。为了方便任何访问者的参考,我将它们添加在下面 - https://learn.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh242982(v=vs.103) 和 https://markheath.net/post/reactive-extensions-observables-versus - Sreenath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接