原本也没深究过这个,用的多了,完全凭借经验办事,理论差的一塌糊涂,最近不流行那个openai,于是在伟大的人工智能辅导下好好梳理一遍理论知识
初步理论认知
async 和 await 是 C# 语言中用于异步编程的关键字,主要作用是让代码在等待异步操作完成的时候继续执行,从而达到不会阻塞线程的效果
async 关键字用于标记异步方法,就是宣告我这是我个异步方法
await 关键字来等待自己里面其他异步操作方法完成(就套自己类型的娃)
然后是,异步操作将在后台线程上执行,直到它完成。
通俗概括一下就是,例如我请求A接口这个异步方法,随即程序立马返回Task对象,并同时用后台新线程执行(就是从.Net程序池内拿出个线程用)
.Net程序池
.NET 线程池是一种由 .NET 运行时维护的线程池,它在应用程序启动时自动创建一组线程,并在需要时从线程池中获取线程来执行任务,上面说的异步在后台线程执行就是从这拿
面试必备话术
好处是可以避免不必要的线程创建和销毁开销,同时能够更好地利用现有的线程资源,提高应用程序的性能和吞吐量
创建异步操作时,并不一定会创建新的线程,而是将操作提交给线程池中的一个线程来执行。这个线程通常称为工作线程或后台线程,因为它在后台执行任务,不会阻塞当前线程
线程池中默认创建的工作线程数是由操作系统和运行时版本决定的,具体数量可以通过 ThreadPool.GetMinThreads 方法和 ThreadPool.GetMaxThreads 方法获取
.NET Core 3.1 和 .NET 5.0 版本中,线程池中默认创建的工作线程数是 1000 个
线程池的大小并不是无限制的
线程池中工作线程的最佳数量取决于应用程序的负载和需求
衍生扩展
感言
写代码也有七八年了,做过无数各式各样的系统,ERP,OA,PMS,HIS... 各种各样的业务需求,这七八年里从crud、到设计封装公司框架、到玩docker、搞微服务。
从.Net Framework 到 .Net 6,从winform到WPF
从 js jq 写到现在的uniapp 和 vue3, 从css 到 scss,ES6, Typescript ...
一路走来90%的实践经验,不足10%的理论记忆...
导致反而工作久了,面临着面试困难,实在面对面试官的标准提问,实在是难以让人家满意,问项目还有各种技术作用问题,解决方案吧,常挂在嘴边的也总是说看具体业务
唉,干越久,越难干,倒不是技术难,至少我对技术的追求热情从未散去,而是准备简历和面试难一度让我怀疑人生,这逼不得已回头看,借助当下流行的ai大哥帮我完整的背诵一下‘标准答案’
那个曾经发誓坚决不背面试题的少年,已经不在了,终究败给现实
标签:异步,深究,await,池中,线程,async,NET From: https://www.cnblogs.com/ncellit/p/17139554.html