RX.Net 第二章 hello Word

server/2024/10/21 11:49:56/

本章提供了一个简单而强大的例子,你可能在过去做过(或者将来可能会做),并以两种方式解决它:传统的事件风格和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/server/10982.html

相关文章

冒泡排序算法及其Python实现

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历待排序的元素&#xff0c;一次比较两个相邻的元素&#xff0c;如果它们的顺序错误就把它们交换过来。重复地进行直到没有需要交换的元素&#xff0c;这样最大&#xff08;或最小&…

如何使用WEB前端模板

我最近想搞一搞前端&#xff0c;前端属实不太行&#xff0c;像前端搞个模板直接套一下。但是发现下载下来也有点不知道怎么用起来&#xff0c;这里我就把我的一个Bootstrap工程套用模板的具体过程记录一下。 首先创建一个前端工程&#xff0c;我这里用的是Bootstrap5&#xff…

【sping】在logback-spring.xml 获取项目名称

在日志文件中我们想根据spring.application.name 创建出的文件夹。 也不想死在XML文件中。 application.yml spring:application:name: my-demo logback-spring.xml <springProperty name"application_name" scope"context" source"spring.app…

Indicator-Sysmonitor|Ubuntu 标题栏显示实时网速、CPU使用率等

分享一款在Ubuntu系统中非常实用的工具&#xff0c;名为Indicator-Sysmonitor。这是一款开源软件&#xff0c;你可以在GitHub上找到它&#xff0c;它能够让你在Ubuntu的任务栏中实时监控CPU和内存使用情况。虽然Ubuntu并没有像Windows端的TrafficMonitor那样广为人知的实时监控…

基于STM32单片机的智能家居环境监测与控制系统设计

基于STM32单片机的智能家居环境监测与控制系统设计 摘要&#xff1a;随着物联网技术的不断发展&#xff0c;智能家居环境监测与控制系统的应用越来越广泛。本文设计了一种基于STM32单片机的智能家居环境监测与控制系统&#xff0c;该系统能够实时监测环境中的温湿度和天然气浓…

Git克隆项目到另一台服务器上详细操作

Git克隆项目到另一台服务器上详细操作 一 克隆原始仓库 首先&#xff0c;确保你从原始仓库克隆了所有分支。通常使用标准的 git clone 命令会拉取所有远程分支的历史&#xff0c;但只会在本地创建默认分支&#xff08;通常是 main 或 master&#xff09;。在克隆前&#xff0…

ChatGPT:让论文写作变得轻松愉快

ChatGPT无限次数:点击直达 ChatGPT&#xff1a;让论文写作变得轻松愉快 在当今信息爆炸的时代&#xff0c;论文写作是许多学术研究者和学生必须面对的挑战之一。从收集数据到整理结构&#xff0c;再到撰写内容&#xff0c;每个步骤都需要耗费大量时间和精力。但是&#xff0c;…

阿斯达年代记三强争霸官网地址+游戏账号注册+游戏下载安装教程

阿斯达年代记国际服&#xff0c;游戏分为三个势力&#xff0c;分别是阿斯达、亚高和不罚者&#xff0c;每个玩家都必须选择一个势力&#xff0c;而每个势力每周将会诞生一名势力族长&#xff0c;将会从五名候选人中投票产生&#xff0c;想要进入候选人名单&#xff0c;必须每天…