草庐IT

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

广州宁骑 2023-03-28 原文

 

原本也没深究过这个,用的多了,完全凭借经验办事,理论差的一塌糊涂,最近不流行那个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大哥帮我完整的背诵一下‘标准答案’

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

 

有关从 async 和 await 开始一路深究到底的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. ruby-on-rails - Ruby/Rails 中的夏令时开始和结束日期 - 2

    我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够

  3. ruby - Ruby 中的 `&:capitalize` 到底是什么? - 2

    我刚读了这个答案Convertingupper-casestringintotitle-caseusingRuby.有如下一行代码"abc".split(/(\W)/).map(&:capitalize).join&:capitalize到底是什么?在我自己将它放入irb之前,我会告诉你,它不是有效的ruby​​语法。它必须是某种Proc对象,因为Array#map通常需要一个block。但事实并非如此。如果我单独将它放入irb,我会得到syntaxerror,unexpectedtAMPER。 最佳答案 foo(&a_proc_o

  4. ruby-on-rails - phusion passenger 和 ruby​​ 1.9.1 已经开始工作了吗? - 2

    我有一台生产机器和一台开发机器,都运行ubuntu8.10并且都运行最新的phusionpassenger。当我在osx上的本地开发机器上使用ruby​​1.9.1时,我想知道外面的人是否已经在使用带有ruby​​1.9.1甚至1.9.2的phusionpassenger?如果是这样,请告诉我们您的设置!此外,有没有办法在apache上使用phusionpassenger同时运行ruby​​1.8.7(ree)和1.9.1?感谢您的指点,我在任何地方都找不到任何提示... 最佳答案 是的,从某些2.2.x版本开始就正式支持它,我不记

  5. ruby - Rails 3 - 我可以将开始日期设置为 date_select 方法吗? - 2

    date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期

  6. ruby - 从特定索引开始迭代数组 - 2

    我想从特定索引开始遍历数组。我该怎么做?myj.eachdo|temp|...end 最佳答案 执行以下操作:your_array[your_index..-1].eachdo|temp|###end 关于ruby-从特定索引开始迭代数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44151758/

  7. ruby - Heroku - 如何开始工作人员(延迟工作)? - 2

    我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:

  8. node.js - 从未编写过任何自动化测试,我应该如何开始行为驱动开发? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易

  9. ruby - 是否有任何命令可以使用 vim 转到 Ruby block 的末尾(或开始) - 2

    有没有办法使用vim结束Rubyblock?例如moduleSomeModule#defsome_methodendend我想用一个命令从光标所在的位置移动到block的末尾,这可能吗?我读过thisdocumentation,但它似乎不适用于.rb文件,我在某些地方读到它只适用于C(虽然还没有尝试过)。提前致谢。 最佳答案 rubyforge好像有官方包对此有一些支持:TheRubyftpluginnowincludesRubyspecificimplementationsforthe[[,]],[],][,[m,]m,[M,an

  10. ruby-on-rails - 从 Ruby 1.9.x、Rails 3 和/或 Merb 开始 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我需要认真阅读Ruby1.9.1和即将推出的Rails3/Merb的变化。人们可以推荐任何文章阅读吗?并不是真的在寻找一个答案,只是在寻找人们正在使用的资源汇编,以跟上即将发生的事情和当前存在的事情,所以如果你路过,请告诉我你在看什么。谢谢!

随机推荐