RX.Net 第二章 hello Word

devtools/2024/9/25 6:23:53/

本章提供了一个简单而强大的例子,你可能在过去做过(或者将来可能会做),并以两种方式解决它:传统的事件风格和Rx风格的事件处理流。

  1. net中编写事件驱动的应用程序非常直观,但在资源清理和代码可读性方面需要注意。

  2. 要使用Rx库,需要安装Rx包。大多数情况下,您将安装系统。反应计划。

  3. 您可以在任何类型的应用程序中使用Rx WPF桌面客户端,asp.net网站或简单的控制台应用程序等。

  4. 传统的。net事件可以转换为可观察对象。

  5. Rx允许您在可观察对象之上编写查询表达式。

  6. Rx提供了许多查询操作符,例如使用Where操作符进行过滤,使用Select操作符进行转换等等。

当然,这还没有结束。这只是你旅程的开始。要在应用程序中正确使用Rx并使用所有丰富的操作符,您需要学习它们以及将它们组合在一起的技术,这就是本书的全部内容。

在下一章中,你将学习函数式的思维方式,它与。net内部的核心概念一起,使Rx得以发展

word">using System;
word">using System.Collections.Generic;
word">using System.Linq;
word">using System.Reactive.Linq;
word">using System.Text;
word">using System.Text.Json;
word">using System.Threading.Channels;
word">using System.Threading.Tasks;word">namespace ReactiveDemo;word">class StockTick
{word">public word">string Name { word">get; word">set; }word">public word">float Price { word">get; word">set; }
}word">class StockTicker
{word">public word">event EventHandler<StockTick> StockTick;word">public word">void Trigger(StockTick stockTick){StockTick?.Invoke(word">this, stockTick);}
}word">struct DrasticChange
{word">public DateTime TimeSpan { word">get; word">set; }word">public word">string Name { word">get; word">set; }word">public word">float ChangeRatio { word">get; word">set; }word">public word">float OldPrice { word">get; word">set; }word">public word">float NewPrice { word">get; word">set; }
}word">class StockReactive
{word">public word">static word">void Run(){word">var maxChangeRatio = 0.3f;word">var stockTicker = word">new StockTicker();//获取事件源word">var ticks = Observable.FromEventPattern<EventHandler<StockTick>, StockTick>(h => stockTicker.StockTick += h,h => stockTicker.StockTick -= h).Select(t => t.EventArgs);//模拟筛选股票价格波动,(有个漏洞,若果tickPair[0].Price = 0 怎么办)word">var ticksGroups = word">from tick word">in ticksword">group tick word">by tick.Name word">into companyword">from tickPair word">in company.Buffer(2, 1)word">let changeRatio = DiffPercentage(tickPair[1].Price, tickPair[0].Price)word">where changeRatio > maxChangeRatioword">select word">new DrasticChange{TimeSpan = DateTime.Now,Name = company.Key,ChangeRatio = changeRatio,OldPrice = tickPair[0].Price,NewPrice = tickPair[1].Price};word">var subescribeer = ticksGroups.Subscribe(t => Console.WriteLine($"收到信息:{JsonSerializer.Serialize(t)}"));//制造数据word">for (word">int i = 0; i < 100; i++){word">var stockTick = word">new StockTick(){Name = $"{(i % 3)}Name",Price = i * DateTime.Now.Second,};stockTicker.Trigger(stockTick);}subescribeer.Dispose();}word">static word">float DiffPercentage(word">float f1, word">float f2){word">if (f1 == 0){f1 = 0.0000000000001f;}word">return Math.Abs((f1 - f2) / f1);}
}

http://www.ppmy.cn/devtools/8699.html

相关文章

视频技术笔记-色差分量

色差分量接口采用YPbPr和YCbCr两种标识。 YPbPr&#xff1a;表示逐行扫描色差输出。 YCbCr&#xff1a;后者表示隔行扫描色差输出。 色差分量接口一般利用3根信号线分别传送亮色和两路色差信号。 色差分量接口是色差接口使用不是很普遍&#xff0c;主要的原因是一些CRT电视机…

python基础语法+爬虫+图像处理+NumpyPandas数据处理(12天速成,第7天上-爬虫Scrapy)

爬虫&#xff08;Scrapy&#xff09;:写一段程序代码&#xff08;网络访问&#xff09;&#xff0c;自动获取网页&#xff08;网络&#xff09;上的数据服务端语言&#xff1a;网络编程&#xff0c;都可以作为爬虫java c c python 等均可写爬虫程序js不是一个典型的服务端程序&…

【Hadoop】-HDFS的Shell操作[3]

目录 前言 一、HDFS集群启停命令 1.一键启停脚本可用 2.独立进程启停可用 二、文件系统操作命令 1、创建文件夹 2、查看指定目录下内容 3、上传文件到HDFS指定目录下 4、查看HDFS文件内容 5、下载HDFS文件 6、拷贝HDFS文件 7、追加数据到HDFS文件中 8、HDFS数据移…

Spring Boot WebService 实战解析

Spring Boot WebServices 实战解析&#xff1a;Endpoint vs WebService 前言 Web Services 是特殊的网络服务&#xff0c;它允许位于不同地点的计算机程序通过互联网交流和共享数据。这些服务可以通过多种方式实现&#xff0c;其中包括使用SOAP协议和遵循REST原则。 在SOAP的实…

排序算法总结

1.冒泡排序 冒泡排序是经典的入门算法&#xff0c;可以说每个人都会写它&#xff0c;但它也可以优化。在面试中让写冒泡排序&#xff0c;不要简单以为就是让你写两重循环&#xff0c;可能是在考察你对它的优化。 基础版本&#xff1a; public void sort(int[] arr){int len …

C#编程过程中List、array、ArrayList这三个推荐用那个

在 C# 编程中&#xff0c;选择使用 List、数组&#xff08;array&#xff09;、ArrayList 这三个集合类型取决于具体的需求和场景&#xff1a; List&#xff1a; List 是泛型集合&#xff0c;提供了类型安全性和性能优势&#xff0c;通常情况下是最佳选择。 当你需要在集合中…

详细说一下索引和性能优化

当我们谈到数据库性能优化时&#xff0c;索引是一个非常重要的篇章。数据库索引是一个数据结构&#xff0c;它可以帮助数据库系统更快地查找数据。 什么是索引&#xff1a; 数据库索引是一种特殊的数据结构&#xff0c;它可以提高数据库查询的速度。可以简单地将数据库索引理解…

使用 less

使用 less less-loader 对应版本 npm install less4.1.1 less-loader7.3.0 --save-dev node &#xff1a;16.4.0