# LC_MyAsyncThread **Repository Path**: lc_tlz/LC_MyAsyncThread ## Basic Information - **Project Name**: LC_MyAsyncThread - **Description**: 1、进程-线程-多线程,同步和异步;2、委托启动异步调用;3、多线程特点:不卡主线程,速度快,无序性;4、异步的回调和状态参数;5、异步等待三种方式;6、异步返回值; - **Primary Language**: C# - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2021-07-29 - **Last Updated**: 2024-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LC_MyAsyncThread /// /// 1、进程-线程-多线程,同步和异步; /// 2、委托启动异步调用; /// 3、多线程特点:不卡主线程,速度快,无序性; /// 4、异步的回调和状态参数; /// 5、异步等待三种方式; /// 6、异步返回值; /// /// 进程:计算机概念,程序在服务器运行时占据全部计算资源总和 /// 线程:计算机概念,进程在响应操作时最小单位,也包括CPU 内存 网络 硬盘IO /// 一个进程会包含多个线程;线程是隶属于某个进程,进程销毁线程也就没有了 /// 句柄:其实是个long数字,是操作系统标识应用程序 /// 多线程:计算机概念,一个进程有多个线程在同时运行 /// /// C#里面的多线程: /// Thread类是C#语言对线程对象的一个封装 /// /// 为什么可以多线程呢? /// 1 多个CPU的核可以并行工作(4核8线程,这里的线程指的是模拟核) /// 2 ***CPU分片***,1s的处理能力分成1000份,***操作系统调度***去响应不同的任务,从宏观角度来说,感觉就是多个任务在并发执行,但是从微观角度来说,一个物理cpu同一时刻只能为一个任务服务 /// /// 并行:多核之间叫并行 /// 并发:CPU分片的并发 /// /// 同步异步: /// 同步方法:发起调用,等待完成后才继续下一行,非常符号开发思维,有序执行; /// 异步方法:发起调用,不等待完成,直接进入下一行,启动一个新线程来完成方法计算; /// /// 启动多少个线程才算合理上线,怎么判断?大概的参考值:CPU核数*4 /// /// 1 Thread:线程等待,回调,前台线程/后台线程 /// 2 ThreadPool:线程池使用,设置线程池,ManualResetEvent /// 3 扩展封装Thread&ThreadPool回调/等待 /// 4 Task:Waitall WaitAny Delay /// 5 TaskFactory:ContinueWhenAny ContinueWhenAll /// 6 并行运算Parallel.Invoke/For/Foreach /// 7 await/async /// //------------------------------------await/async------------------------------------ /// /// 1 await/async语法和使用 /// 2 原理探究和使用建议 /// /// await/async 是c#保留关键字,通常是成对出现的 /// async是修饰方法的,可以单独出现,但是有警告 /// await在方法体,只能出现在task/async方法前面,只有await会报错。 /// /// .NetFramework4.5----await/async语法糖:由编译器提供的功能 /// /// 主线程调用await/async放,主线程遇到await后,就返回执行后续动作, /// await后面的代码会等着task任务完成后在继续执行, /// 其实就像把await后面的代码包装成一个ContinueWith的回调动作, /// 然后这个回调动作可能是Task线程,也可能是新的子线程,也可能是主线程 /// /// 一个async方法,如果没有返回值,方法声明可以返回Task /// ***await/async能够用同步的方式编写代码,但又是非阻塞的*** /// /// await/async是语法糖,本身就是编译器提供的功能 /// /// /// async方法在编译后会生成一个状态机(实新了IAsyncStateMachine接口) /// 状态机:初始化状态0--执行就修改状态1--再执行就修改状态0--执行就修改状态1---如果出现其他状态就结束了 /// 红绿灯 /// ![image](https://user-images.githubusercontent.com/26539681/114360767-f825c280-9ba7-11eb-8282-787c62327a8d.png) ![image](https://user-images.githubusercontent.com/26539681/114360835-1095dd00-9ba8-11eb-9e9b-cad7ea0ceeb4.png) ![image](https://user-images.githubusercontent.com/26539681/114360891-20152600-9ba8-11eb-9bc9-6014090c65f3.png) 希望为.net开源社区尽绵薄之力,探lu者###一直在探索前进的路上###(QQ:529987528)