内容简介:开源地址:学习对象 Rx.NET 和 lx.NET由于资料英文(github的介绍,demo的单元测试,自己的脑洞),自己学习和理解可能有误,希望有问题提出来,ay提前谢谢你们了。
开源地址: 前往
学习对象 Rx.NET 和 lx.NET
由于资料英文(github的介绍,demo的单元测试,自己的脑洞),自己学习和理解可能有误,希望有问题提出来,ay提前谢谢你们了。
4.0就有两个类,AY我新建了.net framework 4.5.2的控制台,开始摸索
官腔解释
Reactive Extensions(Rx)是一个库,用于使用可观察序列和LINQ样式查询运算符组合异步和基于事件的程序。使用Rx,开发人员使用Observables表示异步数据流,使用LINQ运算符查询异步数据流,并使用Scheduler参数化异步数据流中的并发性。简单地说,Rx = Observables + LINQ + Schedulers。
无论您是创作传统桌面还是基于Web的应用程序,您都必须不时处理异步和基于事件的编程。桌面应用程序具有I / O操作和计算成本高昂的任务,可能需要很长时间才能完成并可能阻止其他活动线程。此外,处理异常,取消和同步很困难且容易出错。
使用Rx,您可以表示多个异步数据流(来自不同的来源,例如股票报价,推文,计算机事件,Web服务请求等),并使用IObserver <T>接口订阅事件流。每当发生事件时,IObservable <T>接口都会通知订阅的IObserver <T>接口。
因为可观察序列是数据流,所以可以使用Observable扩展方法实现的标准LINQ查询运算符来查询它们。因此,您可以使用这些标准LINQ运算符轻松地对多个事件进行过滤,投影,聚合,组合和执行基于时间的操作。此外,还有许多其他反应流特定运算符,可以编写强大的查询。通过使用Rx提供的扩展方法,也可以优雅地处理取消,例外和同步。
Rx与同步数据流(IEnumerable <T>)和单值异步计算(Task <T>)平滑地互补和互操作,如下图所示:
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
Rx.NET :(此存储库)Reactive Extensions(Rx)是一个库,用于使用可观察序列和LINQ样式查询运算符组合异步和基于事件的程序。
RxJS:JavaScript的Reactive Extensions(RxJS)是一个库,用于使用JavaScript中的可观察序列和LINQ样式查询运算符来编写异步和基于事件的程序,它们可以同时定位浏览器和Node.js.
RxJava:JVM的Reactive Extensions - 一个库,用于使用Java VM的可观察序列组成异步和基于事件的程序。
RxScala:Scala的Reactive Extensions - 一个使用可观察序列组成异步和基于事件的程序的库
RxCpp:本机的Reactive Extensions(RxCpp)是一个库,用于使用C和C ++中的可观察序列和LINQ样式查询运算符来编写异步和基于事件的程序。
Rx.rb:Ruby的Reactive Extensions(Rx.rb)的原型实现。
RxPy:Python 3的反应性扩展(Rx.Py)是一组库,用于在 Python 3中使用可观察集合和LINQ样式查询运算符组成异步和基于事件的程序
Ix.NET :(包含在此存储库中)Interactive Extensions(Ix)是一个.NET库,它将LINQ扩展到Objects,以提供Rx中可用但是针对IEnumerable的许多运算符。
IxJS:JavaScript中的LINQ to Objects和Interactive Extensions(Ix)的实现。
IxCpp:C ++中用于Native Developers的LINQ实现
Tx:一组代码示例,显示如何使用LINQ事件,例如实时常设查询和跟踪和日志文件的过去历史查询,这些文件以ETW,Windows事件日志和SQL Server扩展事件为目标。
LINQ2Charts:Rx绑定的示例。 与LINQ to XML等现有API类似,它允许开发人员使用LINQ以简单的方式创建/更改/更新图表,并避免处理XML或其他底层数据结构。 我们希望看到更多像这样的Rx绑定。
崇拜下 大牛们,我最喜欢光头。一看就是,因为 "光头"强!
测试过程:
新建控制台 .NET Framework4.6的项目,因为最新的是4.6+,你也可以4.5+的不过你要使用Rx3.X的版本
我使用4.1.2
最新的4.2是预览版
测试代码:
using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; namespace AyTestRx { class Program { static void Main(string[] args) { //IObservable //IObserver IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, IDisposable subscription = source.Subscribe( x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted")); Console.ReadKey(); } } }
效果:
第二个参数是异常,很明显,每次OnNext处理IEnumerable中的1个值,全部处理完执行onCompleted
测试2:
IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, IDisposable subscription = source.Subscribe( x => { Console.WriteLine("OnNext: {0}", x); Thread.Sleep(1000); }, ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted")); Console.WriteLine("www.ayjs.net AY 2019");
是同步执行完的,说明Subscribe阻塞了,感觉跟foreach区别不大。
测试了异常,貌似没有进去第二个参数,不管了,初学嘛
当然Rx没这么简单。。。。这里是皮毛都算不上。
推荐您阅读更多有关于“Rx,”的文章
以上所述就是小编给大家介绍的《写给自己的Rx编程[1]》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 写给自己的Rx编程-WPF [2]
- 254 页 PPT!这是一份写给 NLP 研究者的编程指南
- 写给自己的Kettle笔记1
- 写给自己的Kettle笔记3
- 写给自己的Kettle笔记2
- 写给自己的Kettle笔记4
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Visual C++/Turbo C串口通信编程实践
熊光明 / 电子工业出版社 / 2004-10 / 55.0
一起来看看 《Visual C++/Turbo C串口通信编程实践》 这本书的介绍吧!