001.Reactive Extensions

基本概念

The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators.

Reactive Extensions represents all these data sequences as observable sequences. An application can subscribe to these observable sequences to receive asynchronous notifications as new data arrive.

Push-based/Pull-based

Rx的主要的接口

IObservable<T>/IObserver<T>

IObservable<T>就是observable sequences 的抽象,就像Pull-based中的IEnumerable<T>类似,用来承载数据,代表了一个可以被观察的数据源,他可以在将sequences中的数据,推送给任何一个有兴趣的listener,我们用IObserver<T>来代表这种对IObservable<T>感兴趣的listener。

一个IObservable<T>的实现可以被视为一个T类型数据的集合, 例如IObservable<int>可以被视为一个int类型数据的集合,他们会被推送给IObserver<T>这样的订阅者。

我们看一下接口的定义:

  1. public interface IObservable<out T>
  2. {
  3. IDisposable Subscribe(IObserver<T> observer);
  4. }
  5. public interface IObserver<in T>
  6. {
  7. void OnCompleted(); // Notifies the observer that the source has finished sending messages.
  8. void OnError(Exception error); // Notifies the observer about any exception or error.
  9. void OnNext(T value); // Pushes the next data value from the source to the observer.
  10. }

Rx还通过扩展的方式提供了一些订阅更方便的方式,不需要实现自己的IObserver<T>,只需要实现对应的订阅事件(OnNext, OnError, OnComplete)对应的delegate方法即可,如下面的例子:

  1. IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1
  2. IDisposable subscription = source.Subscribe(
  3. x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed
  4. ex => Console.WriteLine("OnError: {0}", ex.Message),
  5. () => Console.WriteLine("OnCompleted"));

上面这只是两个例子,在实际的开发应用中,我没几乎没有必要自己去实现这两个接口,Rx通过ObservableObserver为我们提供了丰富的足够的实现,后面将继续说明。

null

时间: 2024-10-16 20:40:49

001.Reactive Extensions的相关文章

.Net并行编程 - Reactive Extensions(Rx)并发浅析

关于Reactive Extensions(Rx) 关于Reactive Extensions(Rx),先来看一下来自微软的官方描述: The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. Using Rx, developers represen

Reactive Extensions(Rx)并发浅析

Reactive Extensions(Rx)并发浅析 iSun Design & Code .Net并行编程 - Reactive Extensions(Rx)并发浅析 关于Reactive Extensions(Rx) 关于Reactive Extensions(Rx),先来看一下来自微软的官方描述: The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs us

Reactive Extensions

Rx提供了一种新的组织和协调异步事件的方式,极大的简化了代码的编写.Rx最显著的特性是使用可观察集合(Observable Collection)来达到集成异步(composing asynchronous)和基于事件(event-based)的编程的效果. 我的理解是它是一种编程模式的抽象,http://latentflip.com/imperative-vs-declarative/,协同Linq的思想可以很好的工作,使代码更为整洁. Obervable Collection是Rx的核心,你

使用 RxJS 实现 JavaScript 的 Reactive 编程

简介 作为有经验的JavaScript开发者,我们会在代码中采用一定程度的异步代码.我们不断地处理用户的输入请求,也从远程获取数据,或者同时运行耗时的计算任务,所有这些都不能让浏览器崩溃.可以说,这些都不是琐碎的任务,它是确切的需求,我们学着去避开同步计算,让模型的时间和延时成为问题的关键.对于简单的应用程序,直接使用JavaScript的主事件系统,甚至使用jQuery库帮助也很常见.然而,还没有适当的模式来扩展的简单代码,解决这些异步问题,满足更丰富的应用特性,满足现代web用户的需求,这些

如何理解 RxJS?RxJS的中文API和使用教程

如何理解 RxJS? 我先附上RxJS的中文教程地址方便大家去了解和使用 中文使用教程:http://rxjs-china.org/_book/ 官方中文文档:https://buctwbzs.gitbooks.io/rxjs/content/ 好啦,我们开始讲一下如何理解它 RxJS 可能对很多人而言是一个从没听说过的新名词,那么 RxJS 到底是什么呢?本文中将予以简要介绍 在 Angular 2 中,我们遇到了一个新的概念 —— RxJS. 对很多人而言,这可能是一个比较难以理解的地方.所

RAC(ReactiveCocoa)

什么是 ReactiveCocoa ReactiveCocoa(其简称为 RAC)是由 Github 开源的一个应用于 iOS 和 OS X 开发的新框架.RAC 具有函数式编程和响应式编程的特性.它主要吸取了 .Net 的 Reactive Extensions 的设计和实现. ReactiveCocoa 试图解决什么问题 经过一段时间的研究,我认为 ReactiveCocoa 试图解决以下 3 个问题: 传统 iOS 开发过程中,状态以及状态之间依赖过多的问题 传统 MVC 架构的问题:Co

怎么用API网关构建微服务

选择将应用程序构建为微服务时,需要确定应用程序客户端如何与微服务交互.在单体应用程序中,只有一组端点.而在微服务架构中,每个微服务都会暴露一组通常是细粒度的端点.在本文中,我们将讨论一下这对客户端与应用程序之间的通信有什么影响,并提出一种使用API网关的方法. 当选择将应用程序构建为一组微服务时,需要确定应用程序客户端如何与微服务交互.在单体应用程序中,只有一组(通常是重复的.负载均衡的)端点.然而,在微服务架构中,每个微服务都会暴露一组通常是细粒度的端点.在本文中,我们将讨论一下这对客户端与应

成为专业程序员路上用到的各种优秀资料、神器及框架

最近想着怎么把自己的知识体系进行整理起来,使用思维导图进行描述,对自己以后的发展也有一个更深的认识,更快的提升自己:看到了下面这篇文章,感觉非常实用,从语言到框架都非常全面,自己也可以继续补充,也是对自己知识体系的一个补充吧. 前言 成为一名专业程序员的道路上,需要坚持练习.学习与积累,技术方面既要有一定的广度,更要有自己的深度. 笔者作为一位tool mad,将工作以来用到的各种优秀资料.神器及框架整理在此,毕竟好记性不如烂键盘,此项目可以作为自己的不时之需. 本人喜欢折腾,记录的东西也比较杂

学习RxJS: 导入

引子 新手们在异步编程里跌倒时,永远会有这么一个经典问题:怎么在一次异步调用里return一个结果啊? 老司机说要用回调函数,然后有条件判断的嵌套回调(回调地狱)问题来了: 老司机推荐用事件,然后异步流程里有顺序依赖: 老司机推荐用Promise,然后有顺序依赖的流程里,居然还想订阅事件: 老司机建议试试协程,谁知对方想要合并两个异步调用: -- 以上,是异步编程里要面对的一些难题,也是ReactiveX API 所致力解决的 是什么 知道有 ReactiveX 这么一回事, 源于一位巨硬铁粉的