重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

Rx.Net的核心知识点有哪些

这篇文章将为大家详细讲解有关Rx.Net的核心知识点有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

坡头ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

何为Reactive Extensions(Rx)

Rx是一个遵循函数式编程的类库,它引用观察者以及迭代器设计模式对可观察对象产生的数据进行异步消费。使用Rx,开发人员将使用LINQ运算符操作异步数据流,并使用调度程序参数化异步数据流中的并发性,简单地说,Rx = Observables + LINQ + Schedulers。

使用Rx需要Nuget安装System.Reactive Nuget包

Rx的使用场景

响应式UI

UI界面上,用户对一个绑定数据集合的控件进行关键字查询。常规的流程是我们必须在等待用户键盘按下指定的完成键(如回车)或鼠标点击查询按钮后程序才开始执行相应的查询处理。但假设需求变更:“用户希望在每输入一个关键字后就能及时将关键字相应的查询结果集绑定到控件” 如果面临这个需求,那你会如何实现呢? 你会少不了定义相应的全局状态字段,少不了相应的时间间隔刷新。我相信写出来的代码也会让你很烦恼。 其实你有更好的选择,那就是我们的主角Rx。

Rx 核心

Rx有两个核心接口 IObservable、IObserver

IObservable

先来看此接口的结构:

Rx.Net的核心知识点有哪些

IObservable接口就提供一个Subscribe(订阅)方法,入参是一个观察者对象接口
我们可以将IObservable称之为被观察者(可观察者),IObserver称之为观察者

通过可接口签名可以看出被观察者需要输出T类型的对象。需要理解被观察者IObservable我们需要与现有的一些常规知识点做出比较,这里我们用IEnumerable比较。
我想我们都使用过Linq,操作过IEnumerable集合,IEnumerable集合有个明显的状态就是它所存储的元素是静态的。集合内的元素状态除非代码显示的新增或删除、修改,否则这个集合基本是静态(数据未变动)的。但是IObservable则不同,它的元素是根据被观察者提供的数据而变动的(不可预测的),就好比在UI上你无法预测用户的操作行为一样。

下面这个表格可以看出两者区别

IEnumerable

可方便的列举集合元素值

IObservable

可观察对象变动的值

IObserver

IObserver接口可以理解为消费被贯彻着提供数据的一个接口,它的三个方法决定了本次数据流的观察行为的走向。
通俗理解就是被观察者生成数据,观察者消费数据。

来看下IObserver的结构

Rx.Net的核心知识点有哪些

  • OnNext 表示消费新数据

  • OnError 表示观察数据流出现异常

  • OnCompleted 表示明确关闭观察数据流

代码示例

下面代码定义了一个可观察的队列,该队列会提供给观察者三个int类型的入参 1、2、3 供观察者对象的OnNext方法消费。 MyConsoleObserver(观察者)在得到数据后打印出来。

Rx.Net的核心知识点有哪些

Rx.Net的核心知识点有哪些

通过示例代码我们得知了Rx.Net的数据流订阅、消费流程。

Subject

我们再来认识下Subject,Subject是一个IObservable,它以命令形式生成一个值,并将该值推送给观察者对象。我们看下Subject的结构。

Rx.Net的核心知识点有哪些

看这继承关系,我们继续看SubjectBase里面有些啥~

Rx.Net的核心知识点有哪些

哎呀,这个类真不得了啊,把IObserver和IObservable都给继承了。这不是可以自己提供数据自己进行订阅和消费了么....
我们来看看Subject是怎么玩的:

Rx.Net的核心知识点有哪些

执行结果如下图:

Rx.Net的核心知识点有哪些

需要注意的是订阅方法需要在数据生成前声明。

关于Rx.Net的核心知识点有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


当前名称:Rx.Net的核心知识点有哪些
网站地址:http://cqcxhl.com/article/jiogoo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP