从 async 和 await 开始一路深究到底

 

原本也没深究过这个,用的多了,完全凭借经验办事,理论差的一塌糊涂,最近不流行那个openai,于是在伟大的人工智能辅导下好好梳理一遍理论知识

 

初步理论认知

async 和 await 是 C# 语言中用于异步编程的关键字,主要作用是让代码在等待异步操作完成的时候继续执行,从而达到不会阻塞线程的效果

async 关键字用于标记异步方法,就是宣告我这是我个异步方法

await 关键字来等待自己里面其他异步操作方法完成(就套自己类型的娃)

TaskScheduler 来决定最终是否从线程池中拿新线程

然后是,异步操作将在后台线程上执行,直到它完成。 

通俗概括一下就是,例如我请求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大哥帮我完整的背诵一下‘标准答案’

那个曾经发誓坚决不背面试题的少年,已经不在了,终究败给现实

 

posted @ 2023-02-21 02:07  君宁天下  阅读(391)  评论(3编辑  收藏  举报
野生程序员真的是太难了,一刻也不敢停止学习