<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>yycoding-记录编程点滴</title><subtitle>.NET Developer,前微软最有价值专家(2012-2016)</subtitle><rights> ©2011-2026 yycoding.xyz</rights><updated>2026-03-10T17:12:38Z</updated><generator uri="https://www.yycoding.xyz">Moonglade v12.9.1</generator><entry><id>35BE0CC0-BCE2-49BB-99F6-594D3A2D963E</id><title>中金所股指期权介绍以及保证金计算</title><updated>2026-01-29T23:46:10Z</updated><published>2026-01-29T23:46:10Z</published><link href="https://www.yycoding.xyz/post/2026/1/30/introduction-to-china-financial-futures-exchange-stock-index-options-and-margin-calculation" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>在量化交易的版图中，股指期权（Stock Index Options）不仅提供了非线性的收益结构，更是机构投资者进行波动率管理与风险对冲的核心工具。中金所（CFFEX）的股指期权合约（IO/HO/MO）不仅交易规则复杂，其保证金计算机制更是风控系统开发中的一道坎。本文从程序员的视角出发，解析期权与期货的联动逻辑，并从技术层面解决如何从 CTP 接口中计算期权合约保证金，最终构建一个兼顾盘中估算与盘后结算风控的 C# 资金计算模型。 …</content></entry><entry><id>11327188-83EC-42CC-A01D-764B3C8C5522</id><title>订单簿重建引擎的架构演进与性能优化</title><updated>2026-01-26T00:13:51Z</updated><published>2026-01-26T00:13:51Z</published><link href="https://www.yycoding.xyz/post/2026/1/26/architectural-evolution-and-performance-optimization-of-the-orderbook-reconstruction-engine" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><category term="Data Structures and Algorithms" /><category term="Design Patterns" /><content>在构建低延迟交易系统时，全速盘口（OrderBook）的实时重建是数据处理链路中计算密度最高、对延迟最敏感的环节之一。本文将详细阐述 FastMarketDataManager 组件的演进历程，分析从单线程模型到静态分片，再到基于消息队列的动态负载均衡架构的技术决策过程，重点介绍如何在保证数据严格时序的前提下，摒弃了传统的加锁同步方案，转而利用消息队列的 FIFO 特性，设计了基于控制指令（Command Pattern）的异步迁移流程，解决热点股票引发的队头阻塞（Head-of-Line Blocking）问题。 …</content></entry><entry><id>A6D54F37-7CD4-40BE-B7C8-12B3BF5D7C9C</id><title>使用C++和Qt从零开发一个光影边框程序</title><updated>2025-12-21T23:31:41Z</updated><published>2025-12-21T23:31:41Z</published><link href="https://www.yycoding.xyz/post/2025/12/22/implement-a-image-frame-program-using-c-plus-plus-and-qt" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="C++" /><content>今年双十一的时候我买了一部微单相机，拍完照片后给照片添加“边框水印”变得更好看了。 在这类应用中我最喜欢的是壹印，不论是软件的界面设计，还是生成的水印风格。于是在Gemini的辅助下，我使用C++和Qt复刻了这一款类似壹印水印效果的程序。我有C#经验和一定的C++基础，但从没有使用C++和Qt开发过窗体程序。从最初依赖 FFmpeg 的臃肿工具，到现在拥有自适应纸张纹理、柔光阴影、且体积轻量的原生 C++ 应用，这个项目不仅是代码量的增加，更是对架构设计（策略模式）、性能优化（算法自研）和工程化思维（工具集成） 的一次完整实践。 …</content></entry><entry><id>77D495EE-A344-40ED-B03A-18BAD8E7AB04</id><title>实现一个简单的基于语义的C#代码比较工具</title><updated>2025-11-30T23:43:55Z</updated><published>2025-11-30T23:43:55Z</published><link href="https://www.yycoding.xyz/post/2025/12/1/implement-a-simple-semantic-comparison-tool-for-csharp-base-on-roslyn" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><category term="Design Patterns" /><content>代码比较功能在很多版本管理工具中都存在，比如Git和TortoiseSVN，Compare Beyond中也有。这个功能可以很方便的帮助我们查看代码的变更。目前这些工具都是简单的基于文本差异的比较。然而在有些时候，我们需要基于语义的比较，比如在代码中，我只是调整了方法的前后顺序、添加了一些注释、删除了一些语句之间的空格，或是将一个大的类使用partial关键字，拆分到多个源文件中。在这种情况下，传统的基于简单文本进行代码比较的方式则失去了应有的作用。我们需要保证代码的逻辑和正确定不变即可，而不关心代码的书写格式，比如行号，空格，注释，格式化这些。本文基于Roslyn实现了一个简单的基于语义的C#代码比较工具。 …</content></entry><entry><id>C3C60944-4B8B-469C-99B4-05BA8E6F27E2</id><title>实现一个TCP中继器</title><updated>2025-11-04T19:39:08Z</updated><published>2025-11-04T19:39:08Z</published><link href="https://www.yycoding.xyz/post/2025/11/5/implement-a-tcp-relay" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><category term="Data Structures and Algorithms" /><content>在之前实现端口转发的几种方法这篇文章中，介绍了三种实现端口转发的方法，本质就是建立一个TCP中继： tcpReplay.jpg  TCP中继 但要完整实现一个TCP转发或者代理(Tcp Relay)，还是有很多细节需要考虑。在《Linux多线程服务端编程：使用muduo C++网络库》这本书中，作者提到了以下需要考虑的问题： 建立连接。TCPRelay在接受client的连接C之后才向server发起连接S，那么在S建立之前，从C收到的数据如何处理？要不要暂存起来？ 并发连接的管理。上图中只画了一个client，实际上TcpRelay可以服务多个client，这两边的并发连接如何管理，如何防止串话(cross talk?) 连接断开。client和server都可能主动断开连接。当client主动断开连接C时，TcpRelay应该立刻断开S。当server主动断开连接S时， …</content></entry><entry><id>9FC4E6AE-ACDB-40B1-ADCE-5B2A1F17C27F</id><title>SSL证书的申请和部署</title><updated>2025-10-26T22:31:54Z</updated><published>2025-10-26T22:31:54Z</published><link href="https://www.yycoding.xyz/post/2025/10/27/how-to-apply-and-deploy-ssl-certificate" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="Hardware" /><content>本网站部署在阿里云云主机的IIS服务器上，其中图片使用的是又拍云存储。出于成本考虑一直都是使用的免费的SSL证书，最开始时免费SSL证书的有效期是一年，后来期限缩短为了90天，这使得我需要每隔三个月去申请和部署一下，比较繁琐，所以这里记录一下SSL证书的申请和部署流程。 …</content></entry><entry><id>F8F7348D-3A28-4B8D-99EB-40B74173826B</id><title>新疆印象之大学时光</title><updated>2025-10-23T22:54:58Z</updated><published>2025-10-23T22:54:58Z</published><link href="https://www.yycoding.xyz/post/2025/10/24/impressions-of-xinjiang-my-university-years" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="Some Reading Books" /><content>2004年，我因3分之差与理想大学失之交臂，意外被新疆大学录取，从此与一趟40多小时的特快列车结下四年之缘。每年寒暑假，拥挤的硬座车厢、春运时通宵排队的艰辛、与摘棉工同行的独特经历，都成为我青春里最深刻的印记。在新疆大学，我遇到了许多“同病相怜”的湖北老乡。延续高中模式的大学生活里，我找到了自己的节奏：从害怕英语到凭借巨大词汇量在考研中取得85分高分；从对计算机的初步接触到独立完成融合新技术的毕业设计；从天山天池的野外实习到古尔班通古特沙漠的考察。备考研究生的日子单调而充实，通宵自习、异地听课、复试时的住宿波折，都成了奋斗路上的注脚。最终，我被华东师大录取，为这四年画上圆满句号。那些关于火车、风雪、课堂和友谊的记忆，至今仍是我生命中最珍贵的财富。 …</content></entry><entry><id>2E86214B-05F6-49CE-8991-FEE56409BC51</id><title>新疆印象之2025年南疆行</title><updated>2025-09-27T19:23:29Z</updated><published>2025-09-27T19:23:29Z</published><link href="https://www.yycoding.xyz/post/2025/9/28/impressions-of-xinjiang-a-2025-journey-to-southern-xinjiang" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="Some Reading Books" /><content>今年的8月中旬，去南疆喀什游玩了五天，四个大人一个小孩。 南疆这边喀什的高光景点就是喀什到塔县这一段的帕米尔风光，包括白沙湖、卡拉库勒湖，盘龙古道，班迪尔蓝湖，风景还是非常的壮美。 …</content></entry><entry><id>F83DEEDD-43AF-4041-AFB3-7913231721DB</id><title>新疆印象之2016年北疆行</title><updated>2025-09-27T19:23:27Z</updated><published>2025-09-27T19:23:27Z</published><link href="https://www.yycoding.xyz/post/2025/9/28/impressions-of-xinjiang-a-2016-journey-to-northern-xinjiang" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="Some Reading Books" /><content>在2016年刚结婚不久，我们又一次来到了新疆。我们是在携程上订的名为&amp;ldquo;乌鲁木齐+吐鲁番+天山天池+可可托海+布尔津+喀纳斯8日7晚跟团游(4钻)&amp;middot;0购物0自费 含禾木 车载wifi +特色餐&amp;rdquo;的8天7晚的跟团游，包含来回机票，两个人大概2万多，时间是 2016年9月22～9月29，去机场才了解团队中大部分都是老年人。这是2016年的行程，当时到包括现在来看，这8天7晚的行程，我觉得头两天乌鲁木齐附近的吐鲁番葡萄沟、坎儿井、火焰山、交河故城、天山天池，以及最后一天回程的乌尔禾魔鬼城这些景点基本可以忽略，核心的值得玩的景点只有第四五六三天：富蕴县的可可托海，喀纳斯和禾木这些景点还是非常好看的。但是没办法跟团游就是这样，匆匆忙忙，另一方面是新疆确实很大，而且道路也不可能开的很快。尤其是从乌鲁木齐天山天池的阜康到富蕴县这一段路挺难走，有很大一部分时间都在大巴上 …</content></entry><entry><id>33EB4518-052D-48BB-AFF7-91833003C267</id><title>使用MSChart绘制专业的蜡烛图</title><updated>2025-09-22T22:08:20Z</updated><published>2025-09-22T22:08:20Z</published><link href="https://www.yycoding.xyz/post/2025/9/23/draw-a-professional-candlestick-chart-using-microsoft-chart-controls" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>MSChart(System.Windows.Forms.DataVisualization.Charting.Chart)是Visual Studio中的一个功能强大的图表控件。用它绘制基础图标非常方便，但是要构建一个功能完善的K线图绘制工具，其默认的行为有时会显得捉襟见肘，要实现一个常用的专业的金融软件里面那样的K线图，则需要进行很多细节调整，包括：像素级的精确定位、智能的坐标轴刻度、平滑准确的交互式缩放，这些细节的打磨都需要仔细考虑。 这篇文章总结了开发K线图时遇到的这些问题，基本上能实现一个功能强大，体验较好的专业K线图组件。 一、 搭建图表结构 一般的K线图都包含价格区和成交量区双区域，其中价格区间是包含高开低收的K线图，成交量区是K线对应的成交量柱状图。一些交易软件在成交量区下面还会包含一些证券分析指标图，比如MACD，KDJ等之类的图。 多图表区域布局与对齐 多图表区域布局的 …</content></entry><entry><id>D7FD1AD0-99E5-4F1B-ACE0-328B055CDEB6</id><title>C# 进程间通信深度解析：命名管道、TCP/IP 与内存映射文件</title><updated>2025-08-04T17:08:20Z</updated><published>2025-08-04T17:08:20Z</published><link href="https://www.yycoding.xyz/post/2025/8/5/in-depth-analysis-of-inter-process-communication-in-csharp-named-pipes-tcp-ip-and-memory-mapped-files" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><category term="Design Patterns" /><content>在现代软件架构中，无论是模块化的单体应用、面向服务的架构（SOA），还是日益普及的微服务部署，进程间通信（Inter-Process Communication, IPC）都已从一个简单的实现细节，演变为影响系统性能、安全性与可维护性的基石性架构决策。在此背景下，选择一种合适的 IPC 机制，不仅关乎数据传输的效率，更直接决定了整个系统的响应能力、资源消耗和技术债务。本文介绍了Windows平台上三种主流的IPC通讯方式：命名管道（Named Pipes），   TCP/IP 套接字（TCP/IP Sockets），和内存映射文件（Memory-Mapped Files, MMF），给出了在一对一通讯场景下的企业级实现，并基于BenchmarkDotNet，使用乒乓测试的方式测试了三者的性能，结果显示，在本机IPC模式下，小字节的数据（16B，256B）传输下，内存映射文件的传输效率具有绝 …</content></entry><entry><id>1D324A68-DBFA-4C1B-98A1-21413BEA42F8</id><title>使用内存映射文件实现进程间通讯</title><updated>2025-08-03T19:30:53Z</updated><published>2025-08-03T19:30:53Z</published><link href="https://www.yycoding.xyz/post/2025/8/4/implement-inter-process-communication-using-memory-mapped-files" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>在前文浅谈内存映射文件中详细介绍了什么是内存映射文件（Memory-Mapped File, MMF），以及内存映射文件的用法。在其诸多应用中，很重要的一个就是进程间通讯（Inter-Process Communication，IPC）。内存映射文件允许将文件内容直接映射到进程的虚拟地址空间，使得应用程序能够像访问内存一样访问文件数据。但要正确和高效地使用内存映射文件进行进程间通讯则需要一些技巧，它需要处理多个进程对同一块内存区域进行高效的读写问题，这里就自然涉及到竞争和同步。本文首先介绍了一个简单的一对一的使用MMF进行进程间单向通讯的例子，紧接着指出其中的低效，然后通过引入环形队列数据结构来分隔读和写，从而达到移除锁的使用，进而大幅提高效率。最后在此基础上介绍了一对一双向通讯，以及一对多通讯的实现思路。 …</content></entry><entry><id>EC877E91-02ED-416B-8E7D-B77B1FEF2377</id><title>浅谈内存映射文件</title><updated>2025-07-18T03:45:04Z</updated><published>2025-07-18T03:45:04Z</published><link href="https://www.yycoding.xyz/post/2025/7/18/a-brief-introduction-of-memory-mapped-file" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>内存映射文件（Memory-Mapped File, MMF）允许将文件内容直接映射到进程的虚拟地址空间，使得应用程序能够像访问内存一样访问文件数据。这种机制通过操作系统虚拟内存管理器（Virtual Memory Manager, VMM）的深度集成，绕过了传统I/O操作中固有的数据复制和系统调用开销，从而在特定场景下实现数量级的性能提升。对于开发那些需要在I/O性能上达到极致的系统（如数据库、大数据分析平台、金融交易系统）而言，深入理解并掌握MMF是不可或缺的关键技能。 从传统I/O到内存映射的转变 传统的文件I/O，如通过FileStream进行的操作，其本质是指令驱动的。开发者通过Read、Write、Seek等命令，显式地请求操作系统在内核缓冲区和用户空间缓冲区之间移动数据 。这个过程涉及多次数据复制和频繁的上下文切换，是典型I/O瓶颈的根源。 相比之下，内存映射文件是一种状态驱 …</content></entry><entry><id>402A399D-14E9-4764-BF7B-802360A83F93</id><title>浅谈环形队列数据结构</title><updated>2025-07-14T03:57:35Z</updated><published>2025-07-14T03:57:35Z</published><link href="https://www.yycoding.xyz/post/2025/7/14/a-brief-introduction-of-circular-queue" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="Data Structures and Algorithms" /><content>环形队列（Circular Queue），也被称为环形缓冲区（Circular Buffer）或环状缓冲区（Ring Buffer）。这是一个在高性能计算、底层驱动和实时系统中极为重要和常见的数据结构。环形队列有很多应用，比如音视频处理中的平滑地处理数据流，防止卡顿；操作系统内核中的I/O缓冲区、管道(Pipe)的实现；网络通信中用于收发网络数据包的缓冲区；以及使用内存映射文件进行进程间通讯时，使用环形缓冲区能够减少锁占用。 …</content></entry><entry><id>50688FF9-93C7-468D-96DA-38271D0A271A</id><title>C++语言演化中的审慎原则</title><updated>2025-07-02T16:21:34Z</updated><published>2025-07-02T16:21:34Z</published><link href="https://www.yycoding.xyz/post/2025/7/3/the-principle-of-prudence-in-the-evolution-of-cplus-plus" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="C++" /><category term="Design Patterns" /><content>本文深入剖析了C++语言演化中所秉持的“审慎原则”，论证了标准委员会（WG21）通过有意识地拒绝或搁置某些语言特性，从而成功维护了C++的长期稳定性与核心设计哲学。报告通过四个关键案例展开论证：一、在处理多重继承的虚函数名冲突时，委员会选择推广设计模式（适配器模式）而非引入新“重命名”语法，以避免语言膨胀。二、面对双重分发的需求，它采纳了访问者模式，拒绝了可能导致对象模型过度复杂化的原生语言支持。三、它坚定地拒绝内置垃圾回收（GC）机制，以捍G卫RAII范式、零开销原则及性能的确定性，这些是C++的立身之本。四、在类型推导上，它没有直接采纳当时已有但存在瑕疵的typeof，而是精心设计了语义更精确的decltype，彰显了对语言基础工具正确性的极致追求。综上所述，这些决策共同揭示了C++标准化过程中的一种成熟智慧：通过审慎的“减法”来保证语言的健壮、高效与持久生命力 …</content></entry><entry><id>B3D9ED25-75E6-4614-A1B2-176DCD0C228F</id><title>CMake入门教程</title><updated>2025-06-30T22:56:15Z</updated><published>2025-06-30T22:56:15Z</published><link href="https://www.yycoding.xyz/post/2025/7/1/a-brief-introduction-of-cmake" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="C++" /><content>CMake已经成为C++生态系统中事实上的标准构建系统生成器。它通过将复杂的构建逻辑抽象到一个统一的、跨平台的脚本语言中，极大地提高了项目的可维护性和可移植性。掌握现代CMake，特别是其基于目标的依赖管理思想，是每一位严肃的C++开发者必备的技能。本教程从CMake的基础工作流程和核心语法出发，深入探讨了作用域、库的构建与链接、条件编译以及高级模块化技术。我们强调了“源码外构建”的重要性，详细解析了PUBLIC、PRIVATE和INTERFACE关键字在传递依赖关系中的核心作用，并针对Linux平台特别讲解了RPATH和$ORIGIN在创建可重定位软件包中的应用。通过对比function与macro、target_sources与file(GLOB)，我们阐明了现代CMake的最佳实践及其背后的设计哲学。最终，通过一个完整的实战项目，我们将所有理论知识融会贯通，展示了如何构建一个结构清晰 …</content></entry><entry><id>36C40B5F-08DD-43ED-9722-DBEFA870165D</id><title>Windows服务“伪运行”之谜：从一个时间同步服务的失灵谈起</title><updated>2025-06-19T23:27:16Z</updated><published>2025-06-19T23:27:16Z</published><link href="https://www.yycoding.xyz/post/2025/6/20/the-pseudo-running-windows-service-enigma-a-case-study-of-a-failing-time-synchronization-service" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>本文通过一个时间同步服务的具体案例，深入探讨了Windows服务在“快速启动”模式下出现的“伪运行”问题。该问题的典型症状是：服务设置为自动启动，在“关机”再开机后，其状态显示为“正在运行”，却没有执行其OnStart方法中的关键启动任务（如首次时间同步）。文章剖析了此现象的根本原因在于Windows的快速启动机制。该机制通过休眠并恢复系统内核及服务进程来加速开机，这个过程会完全跳过OnStart方法，导致服务从一个过时的、无效的内存状态中“假醒”，成为“僵尸服务”。为解决此问题，文章提供了一套完整的排查与解决方案。首先，介绍了如何通过正确配置Windows事件日志来进行有效诊断，并指出了创建事件源的权限要点。其次，说明了如何通过禁用快速启动来快速验证问题根源。最终，文章给出了最健壮的根本性解决方案：在C#服务代码中重写OnPowerEvent方法，使其能够响应系统的Suspend …</content></entry><entry><id>5CD05F4F-B3FA-4EA9-BB35-45305EAC1A80</id><title>不止于值：解析.NET中“赋值即触发”的状态驱动事件模式</title><updated>2025-06-19T00:25:31Z</updated><published>2025-06-19T00:25:31Z</published><link href="https://www.yycoding.xyz/post/2025/6/19/more-than-just-a-value-analyzing-the-assignment-as-trigger-state-driven-event-pattern-in-dotnet" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><category term="Design Patterns" /><content>即便是给一个对象的属性赋上与它当前完全相同的值，相关的“已更改”（XXXChanged）事件依然被触发了。一个典型的例子就是在使用 System.Data.DataTable 或System.Configuration.ApplicationSettingsBase时。研究源码发现，ApplicationSettingsBase 和 DataTable 的“赋值即触发”行为，并非缺陷，而是.NET框架中一个优雅且实用的状态驱动事件模式的体现。它将数据容器从简单的值存储器提升为强大的状态机，极大地简化了数据持久化和同步的复杂性。它选择牺牲微不足道的判断性能，来换取核心功能（状态跟踪）的绝对可靠性。理解了其“关注状态，而非价值”的核心思想，并洞悉其源码实现后，我们就能根据实际场景，明智地选择是利用还是“修正”这一行为，从而编写出更健壮、更高效的.NET应用程序。 …</content></entry><entry><id>50B3BFF8-6C1D-4BE8-8845-F53F376F8EA5</id><title>使用NTP协议实现时间同步客户端和授时服务端</title><updated>2025-06-05T21:52:34Z</updated><published>2025-06-05T21:52:34Z</published><link href="https://www.yycoding.xyz/post/2025/6/6/implement-a-time-synchronization-client-and-a-time-serving-server-using-the-ntp-protocol" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>在之前写了两篇关于NTP的文章，一篇是使用NTP协议实现本地时间跟NTP授时服务器进行同步介绍了NTP协议的原理，另一篇是实现一个时间同步客户端NTPClock介绍了使用WPF编写一个模仿NTPClock的时间同步的App，因为Windows的自动较时功能不是很完善，所以这个应用我自己使用了很长时间。 在这篇文章里，我准备将前面两篇文章总结一下，对一些方法进行重构，另外实现一个利用NTP来实现授时的服务端，以完善整个功能。一般的我们都是使用一些公开的NTP授时服务地址，比如"time.windows.com"、"pool.ntp.org"等来获取时间，这有一些限制： 必须要求这个服务器能够访问和解析这些授时服务器地址，这在有些机房的内网计算机上其实是无法满足条件的。 这些公开的NTP授时服务器大多有请求频率限制，如果请求次数多过或过快，可能会请求失败。  有时候，我们有自己的GPS接收装置 …</content></entry><entry><id>66125153-C91E-468A-A2AE-8AF16C69A66C</id><title>浅析C#中异步编程以及TAP模式</title><updated>2025-05-27T16:15:31Z</updated><published>2025-05-27T16:15:31Z</published><link href="https://www.yycoding.xyz/post/2025/5/28/a-brief-introduction-of-asynchronous-programming-and-task-based-asynchronous-pattern-in-csharp" /><author><name>yangyang</name><email>xjdx2008@126.com</email></author><category term="DotNet Framework" /><content>虽然C#转眼间已经发展到了14.0版本，但有些在 C#5.0 引入并随.NET Framework 4.5一同发布的特性比如async和await我仍不是很清楚，然而这些新特性在一些人工智能生成的代码中使用的越来越多，因为它们确实能够提高异步编程时代码的清晰度，所以最近几天好好研究了一下它的原理。异步编程可以解决线程因为等待独占式任务而导致的阻塞，但异步编程一直是一个难点，如何正确实现异步模式却不容易，因为它涉及到诸如状态管理，异常管理，同步上下文，异步任务组合等等诸多问题。C#中有很多异步编程模型，最早的有APM (Asynchronous Programming Model) ，随后有EAP(Event-Based Asynchronous Pattern)以及建立在EAP基础上的BackgroundWorker等等，这些异步编程模型在场景比较简单时可能可以满足要求，但 …</content></entry></feed>