当前位置: 首页 > article >正文

c#笔记番外篇同步异步并行串行多线程(以及lambda 表达式)

学习目标:算是一个一直以来的疑惑点而且ltm老师的视频了没有说这个,只能四处找资料;先确定一个答案:就是异步和多线程是两种东西,异步可以在单线程里异步也可以在多线程里异步;同步异步是等不等的问题;比如煮饭和炒菜两件事,同步就是先煮饭等着饭煮好了再做菜;异步就是先淘米上锅煮饭然后在等饭煮好的这段时间里顺便去做菜,在你做菜的这段时间不管饭煮没煮好都会先等你把菜做好;饭煮好了菜没做完你就继续做菜;多线程就是多来一个人,这时候可以一个人做菜一个人煮饭;一、学习前置:1、lambda 表达式这个看另外一篇3.调试在打断点调试多线程的时候在vs里可以打开:调试-窗口-线程;就可以看到当前打断点的这一句是哪个线程一、多线程1.1、进程和线程1.1.1进程一个程序打开就是一个进程;一个进程在一开始的时候执行的第一个线程就是主线程;一个进程可以有多个线程;(线程执行是主线程先执行然后再启动其他线程);1.1.2线程线程是进程内部的执行单元,一个进程至少有一个主线程。线程是程序里做事的最小执行单元,就相当于工厂里的工人,进程就是一个工厂里面可以有很多个工人;或者是是线程就是一条流水线;1.2为什么要有多线程大量任务要同时执行节省时间,你觉得这个方法做起来耗时间就开一个线程让这个方法去别的流水线做事;在winform里就是不卡ui界面,比如要等待读取一个大文件或者通信耗时操作,如果只有一个ui线程在事情没有做完之前界面会卡死没办法操作;1.3 ThreadThread是 .NET 中最底层的线程控制类,直接对应操作系统的内核线程。创建多个Thread就是最简单的多线程;1.3.1声明创建调用无参方法;(会发现线程的调用流程和创建和委托非常像,都是把一个方法给别人去调用;Thread的构造函数接受的就是一个委托,有兴趣可以了解一下)static async Task Main(string[] args) { Stopwatch sw = new Stopwatch();//计时类 sw.Start(); Thread t = new Thread(TestFunc);//创建线程 t.Start();//启动方法 t.Join();//等待方法完成 Console.WriteLine(sw.ElapsedMilliseconds.ToString()+"ms...."); } static void TestFunc() { for (int x = 0; x 5; x++) { Thread.Sleep(200); Console.WriteLine(x+"work...."); } }带参数的方法class Program { static void Main() { // 方式1:使用 ParameterizedThreadStart;使用这种的时候方法声明有要求 Thread t1 = new Thread(DoWorkWithParam); t1.Start("Hello World"); // 方式2:使用匿名函数捕获变量(更灵活) Thread t2 = new Thread(() = { TestFunc1(1, 2); }); //Thread t2 = new Thread(() = TestFunc1(1, 2));//这个是lambda一行代码的简写 t2.Start(); } static void DoWorkWithParam(object? obj)//参数只能是object类型,在方法里再强制转换 { string msg = obj as string ?? string.Empty; Console.WriteLine($"收到参数: {msg}"); } static void TestFunc1(int x,int y) { Console.WriteLine(msg); } }1.3.2 线程名. Start()开始启动线程,创建线程要靠这个方法来启动线程;多个线程时谁先Start就谁先运行;运行之后就是随机的了;Thread t = new Thread(TestFunc);//创建线程 t.Start();//启动方法1.3.3 线程名.Join()等待等待线程的完成,必须线程的任务完成了程序才会往下执行,如果线程的任务是个while循环的话用了join程序就永远不会执行下面的了,而且Join()是同步阻塞方法。如果在 UI 线程(主线程)上调用t.Join(),UI 线程会被完全卡住;join支持堵塞时间比如堵塞100ms就是:join(100)Thread t = new Thread(TestFunc);//创建线程 Thread t2 = new Thread(() = { TestFunc1(1, 2); }); //Thread t2 = new Thread(() = TestFunc1(1, 2)); t.Start();//启动方法 t.Join();//等待方法完成 Console.WriteLine(sw.ElapsedMilliseconds.ToString()+"ms....");1.3.4 Thread.sleep()休息Thread.Sleep 就是让「当前正在执行这段代码的线程」原地休息。它只认执行代码的线程,不认你是哪个方法写的。也就是哪个线程里调用就会休息哪个线程;(在winiform编程里线程里的while最好不要用true而是用个标志位,在关闭窗口或者别的时候要关闭线程的时候就标志位false就可以关闭线程,因为在线程里的事做完之后线程会自动关闭)这种情况因为Thread.Sleep(100);放在了 this.Invoke里被一起送去了ui线程 所以sleep的是ui线程而不是线程t1;这种时候ui线程会卡顿 t1 = new Thread(() = { int x = 0; while (true) { this.Invoke(() = { textBox1.Text = x.ToString(); Thread.Sleep(100); }); x++; } }); t1.Start(); ////////////////////////////////////////////////////////////// 这样才是t1休息 t1 = new Thread(() = { int x = 0; while (true) { this.Invoke(() = { textBox1.Text = x.ToString(); }); x++; Thread.Sleep(100); } }); t1.Start();1.3.5 Thread的停止1线程名.abort():不管线程在干嘛,直接强制结束;这种方法是非常旧的停止方法现在微软以及停止使用了,老版本还可以用;private void button1_Click(object sender, EventArgs e) { t1 = new Thread(() = { thread.sleep(50000); }); t1.Start(); } private void button2_Click(object sender, EventAr

相关文章:

c#笔记番外篇同步异步并行串行多线程(以及lambda 表达式)

学习目标: 算是一个一直以来的疑惑点而且ltm老师的视频了没有说这个,只能四处找资料; 先确定一个答案:就是异步和多线程是两种东西,异步可以在单线程里异步也可以在多线程里异步; 同步异步是等不等的问题;比如煮饭和炒菜两件事,同步就是先煮饭等着饭煮好了再做菜;异…...

AIAgent智能体交付流水线重构实录(从月级发布到分钟级灰度上线)

第一章:AIAgent智能体交付流水线重构实录(从月级发布到分钟级灰度上线) 2026奇点智能技术大会(https://ml-summit.org) 传统AI智能体交付长期受限于模型-服务-编排三体割裂:大模型微调需人工调度GPU队列,Agent逻辑变更…...

如何精通Spring设计模式?spring-reading项目中的5大核心模式实战指南

如何精通Spring设计模式?spring-reading项目中的5大核心模式实战指南 【免费下载链接】spring-reading 涵盖了 Spring 框架的核心概念和关键功能,包括控制反转(IOC)容器的使用,面向切面编程(AOP&#xff09…...

OpCore Simplify:让普通用户也能轻松完成黑苹果系统配置的终极指南

OpCore Simplify:让普通用户也能轻松完成黑苹果系统配置的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify 是一款…...

gh_mirrors/code/code消息总线详解:构建松耦合的事件驱动系统

gh_mirrors/code/code消息总线详解:构建松耦合的事件驱动系统 【免费下载链接】code Example application code for the python architecture book 项目地址: https://gitcode.com/gh_mirrors/code/code 在现代软件开发中,构建灵活、可扩展的系统…...

从零开始掌握ky:基于fetch的轻量级HTTP客户端实战指南

1. 为什么你需要ky这个HTTP客户端? 如果你经常用JavaScript写前端项目,肯定对原生fetch不陌生。这个浏览器自带的API确实解决了XMLHttpRequest的很多痛点,但用久了就会发现它有不少"反人类"设计。比如: 必须手动检查res…...

Open NSynth Super故障排除:常见问题与解决方案

Open NSynth Super故障排除:常见问题与解决方案 【免费下载链接】open-nsynth-super Open NSynth Super is an experimental physical interface for the NSynth algorithm 项目地址: https://gitcode.com/gh_mirrors/op/open-nsynth-super Open NSynth Supe…...

SDD基于规范编程-OpenSpec及SuperPowers坡

智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式,即所谓的“工程导向型”开发,要求开发者创建一个复杂的项目结构,包括项目文件(.csproj)、解决方案文件(.sln)、属性设置以及依赖…...

多目标冲突频发?AIAgent性能崩塌、可解释性归零、推理延迟飙升,如何用动态权重蒸馏法48小时内重构优化层

第一章:多目标冲突频发:AIAgent性能崩塌、可解释性归零、推理延迟飙升的系统性症候 2026奇点智能技术大会(https://ml-summit.org) 当一个AI Agent被同时要求“响应快于200ms”、“生成决策链完整可追溯”、“在资源受限边缘设备上运行”且“支持实时多…...

AI视频工具那么多,为什么你还是做不好课程视频?(附工具对比与选型建议)

📌 一、问题:工具越来越多,视频却越来越难做?这两年AI视频工具爆发:文本生成视频(Sora / Veo / Seedance)数字人视频平台自动剪辑工具看起来:做视频应该越来越简单但现实是&#xff…...

从零开始:使用PyTorch 2.7镜像快速运行YOLO项目

从零开始:使用PyTorch 2.7镜像快速运行YOLO项目 1. 环境准备与快速部署 PyTorch 2.7镜像是一个开箱即用的深度学习环境,预装了PyTorch和CUDA工具包,能够直接调用GPU加速模型训练和推理。这个镜像特别适合想要快速上手计算机视觉项目的开发者…...

Calico IPIP 使用指南断

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...

如何把PPT做成讲解视频(新手指南)|3种方法一步步教会你

很多人都有这样的需求:做课程讲解做培训视频做知识分享但卡在一个关键问题:👉 怎么把PPT变成“会讲解”的视频?注意,这里不是简单导出视频,而是:✅ 有讲解 ✅ 有节奏 ✅ 有字幕这篇文章&#xf…...

AI应用工程化落地的隐秘痛点:从直连官方到接入聚合网关的实践之路

在2026年的开发语境里,“调用一个大模型”早已不是demo阶段的几行curl命令。当AI功能从原型验证走向生产环境,真正的挑战才浮出水面:如何保证每一次请求的稳定返回?如何在高峰期扛住并发压力?如何在模型更新时让业务代…...

终极ESP32 Arduino开发指南:从零到物联网专家的完整教程

终极ESP32 Arduino开发指南:从零到物联网专家的完整教程 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 想象一下,你有一个智能家居的想法:一个能自动调…...

【AIAgent架构知识图谱集成终极指南】:20年架构师亲授3大落地陷阱与5步标准化接入法

第一章:AIAgent架构知识图谱集成全景认知 2026奇点智能技术大会(https://ml-summit.org) AI Agent 架构正从单任务响应模型演进为具备持续感知、推理与行动能力的自主认知体。知识图谱作为结构化世界知识的语义中枢,其与 AI Agent 的深度集成&#xff0…...

快速上手 FakeStoreAPI:5分钟学会使用免费电商数据接口

快速上手 FakeStoreAPI:5分钟学会使用免费电商数据接口 【免费下载链接】fake-store-api FakeStoreAPI is a free online REST API that provides you fake e-commerce JSON data 项目地址: https://gitcode.com/gh_mirrors/fa/fake-store-api FakeStoreAPI …...

如何在iPhone上轻松下载种子文件?iTorrent iOS下载器终极指南

如何在iPhone上轻松下载种子文件?iTorrent iOS下载器终极指南 【免费下载链接】iTorrent Torrent client for iOS 16 项目地址: https://gitcode.com/gh_mirrors/it/iTorrent 还在为iPhone无法下载种子文件而烦恼吗?iTorrent就是你的救星&#xf…...

DamoFD开源模型企业级运维:Prometheus监控指标+Grafana看板配置

DamoFD开源模型企业级运维:Prometheus监控指标Grafana看板配置 在实际生产环境中,部署一个轻量级但高精度的人脸检测模型只是第一步。真正决定它能否长期稳定服务的,是背后一整套可观测性体系——尤其是对GPU资源消耗、推理延迟、请求吞吐、…...

5分钟拯救珍贵视频!untrunc视频修复工具终极指南

5分钟拯救珍贵视频!untrunc视频修复工具终极指南 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 您是否曾因相机突然断电、存储卡故障或传输中断而丢失珍…...

2026奇点智能技术大会AIAgent推荐系统全栈拆解(含LLM-RAG-Graph协同推理链路图谱)

第一章:2026奇点智能技术大会:AIAgent推荐系统 2026奇点智能技术大会(https://ml-summit.org) 核心架构演进 本届大会首次公开部署的AIAgent推荐系统,基于多模态意图理解与动态知识图谱协同推理构建。系统摒弃传统静态协同过滤范式&#xf…...

keil---封装核心代码成库

在 Keil 里把核心代码封装成静态库(.lib / .a),是最常用、最有效防抄走的方法。别人只能调用函数,看不到源码。 下面给你最简单、一步一步能照做的教程。 一、整体思路 把你不想给别人看的代码(算法、驱动、TLI/IPA、协…...

FastAPI-React性能优化:Celery异步任务与Redis消息队列

FastAPI-React性能优化:Celery异步任务与Redis消息队列 【免费下载链接】fastapi-react 🚀 Cookiecutter Template for FastAPI React Projects. Using PostgreSQL, SQLAlchemy, and Docker 项目地址: https://gitcode.com/gh_mirrors/fa/fastapi-rea…...

如何为db_tutorial项目添加图数据模型支持:完整指南

如何为db_tutorial项目添加图数据模型支持:完整指南 【免费下载链接】db_tutorial Writing a sqlite clone from scratch in C 项目地址: https://gitcode.com/gh_mirrors/db/db_tutorial db_tutorial是一个用C语言从零实现SQLite克隆的开源项目,…...

新手必看!PyTorch 2.8镜像开箱即用,3步搞定CUDA环境配置

新手必看!PyTorch 2.8镜像开箱即用,3步搞定CUDA环境配置 1. 为什么选择PyTorch 2.8镜像? 深度学习环境配置一直是让新手头疼的问题,特别是CUDA驱动、cuDNN版本与PyTorch的兼容性问题。PyTorch 2.8镜像解决了这个痛点&#xff0c…...

仲景中医大语言模型:当千年中医智慧遇见现代人工智能

仲景中医大语言模型:当千年中医智慧遇见现代人工智能 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine l…...

软件领域驱动设计管理中的领域层

软件领域驱动设计(DDD)中的领域层:业务逻辑的核心枢纽 在软件开发中,领域驱动设计(DDD)通过将复杂业务逻辑结构化,帮助团队更高效地构建可维护的系统。领域层作为DDD的核心,承载了业…...

VCSA 7.0 高效部署实战:从零到生产环境的完整指南

1. 部署前的准备工作 部署VCSA 7.0之前,我们需要做好充分的准备工作。首先得去VMware官网下载最新的VCSA 7.0镜像文件,文件名通常是VMware-VCSA-all-7.0.0-xxxx.iso这样的格式。这里有个小技巧,建议下载时核对下SHA256校验值,确保…...

LFM2.5-1.2B-Thinking-GGUF实战手册:GPU显存占用监控与llama.cpp内存调优

LFM2.5-1.2B-Thinking-GGUF实战手册:GPU显存占用监控与llama.cpp内存调优 1. 模型与平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。该模型采用GGUF格式,配合llama.cpp运行时&#xff0c…...

dotnetbook实战解析:10个关键技巧优化.NET应用程序性能

dotnetbook实战解析:10个关键技巧优化.NET应用程序性能 【免费下载链接】dotnetbook .NET Platform Architecture book (English, Chinese, Russian) 项目地址: https://gitcode.com/gh_mirrors/do/dotnetbook 在开发.NET应用程序时,性能优化是提…...