写给自己的Rx编程[1]

栏目: ASP.NET · 发布时间: 7年前

内容简介:开源地址:学习对象   Rx.NET 和   lx.NET由于资料英文(github的介绍,demo的单元测试,自己的脑洞),自己学习和理解可能有误,希望有问题提出来,ay提前谢谢你们了。

开源地址: 前往

学习对象   Rx.NET 和   lx.NET

由于资料英文(github的介绍,demo的单元测试,自己的脑洞),自己学习和理解可能有误,希望有问题提出来,ay提前谢谢你们了。

4.0就有两个类,AY我新建了.net framework 4.5.2的控制台,开始摸索

写给自己的Rx编程[1]

写给自己的Rx编程[1]

官腔解释

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>)平滑地互补和互操作,如下图所示:

写给自己的Rx编程[1]

====================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绑定。

崇拜下 大牛们,我最喜欢光头。一看就是,因为 "光头"强!

写给自己的Rx编程[1]

测试过程:

新建控制台 .NET Framework4.6的项目,因为最新的是4.6+,你也可以4.5+的不过你要使用Rx3.X的版本

我使用4.1.2

写给自己的Rx编程[1]

最新的4.2是预览版

写给自己的Rx编程[1]

测试代码:

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();
        }
    }
}

写给自己的Rx编程[1]

效果:

写给自己的Rx编程[1]

第二个参数是异常,很明显,每次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");

写给自己的Rx编程[1]

是同步执行完的,说明Subscribe阻塞了,感觉跟foreach区别不大。

测试了异常,貌似没有进去第二个参数,不管了,初学嘛

写给自己的Rx编程[1]

当然Rx没这么简单。。。。这里是皮毛都算不上。

推荐您阅读更多有关于“Rx,”的文章


以上所述就是小编给大家介绍的《写给自己的Rx编程[1]》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具