写给自己的Rx编程[1]

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

内容简介:开源地址:学习对象   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]》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

咨询的奥秘

咨询的奥秘

[美] 杰拉尔德·温伯格(Gerald M.Weinberg) / 李彤、关山松 / 清华大学出版社 / 2004 / 29.00元

一起来看看 《咨询的奥秘》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具