当前位置:网站首页 / C#人爱学不学 / 正文

[AY] 写给自己的Rx编程[1]

时间:2018年12月24日 | 作者 : aaronyang | 分类 : C#人爱学不学 | 浏览: 1885次 | 评论 0

开源地址: 前往

学习对象   Rx.NET 和   lx.NET

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


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

image.png

image.png

官腔解释

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

image.png

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


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

image.png

测试过程:

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

我使用4.1.2 

image.png

最新的4.2是预览版

image.png

测试代码:

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

image.png

效果:

image.png

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

image.png

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


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

image.png



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










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

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,目前主maui

招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰

目前在合肥市企迈科技就职

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表