首页 > 编程语言 >关于C# await的一点新理解

关于C# await的一点新理解

时间:2024-01-31 10:33:59浏览次数:26  
标签:异步 Task Run C# await 调用 线程 理解

关于await又理解深一点了,以前有点懵,
原来await 是对Task.Run的一个修饰,叶节点,后续技节点是对标有async的方法进行串烧修饰,所以根在Task.Run这个方法要所以要理解await必须要详细查看Task.Run
Task.Run是调用后直接把Run的参数委托丢线程池的然后不等待直接返回的,所以返回是一个Task/Task<T>只有这两种情况加上await以后 就等待,然后直接取出Task<T>中的T了,这中间的各种可能的隐藏操作被底层编译器,运行时等代替了,比如线程上下文切换等。

要注意其实在实际场景中直接用Task.Run而不加await的情况才是异步的核心需求,异步的意思是同时做不等待。所以只有让很多Task同时开始调用的时候才有价值。

 

所以在同步调用方调用async方法时,最终还得用.Wait()/Result两种方式对其进行调用,从这里可以看出await其实是在异步线程池上进行的等待。因为现在有很多异步调用终端比如 webapi中的 Controller.Action方法比如 标记为async的Main方法都是异步调用终端所以不需要用上述方式切换回

同步主线程。

标签:异步,Task,Run,C#,await,调用,线程,理解
From: https://www.cnblogs.com/ProjectDD/p/17998687

相关文章

  • CISCN_2018Picture_misc_wp
    CISCN_2018Picture_misc_wp思路第一关文件分离拿到一张图片,看到jpeg格式文件结尾之后依旧还有数据,猜想可能是隐藏了某些文件直接拿到binwalk中分析一下可以看到里面又一个zlib压缩包直接binwalk-e--run-as=root'[CISCN2018]Picture.jpg'直接得到压缩包的结果第......
  • jQuery引用教程,CDN或下载教程
    如何在网页中添加jQuery?jQuery库是一个JavaScript文件,可以使用HTML的<script>标签引用它,通过其他云厂商提供的CDN在网页中添加jQuery。阿腾云atengyun.com分享多种安装jQuery的方法:下载jQuery并引用jQuery有两个版本的可供下载:Productionversion–用于实际的网站中,已被精简和......
  • Authentication vulnerabilities
    身份验证漏洞从概念上讲,身份验证漏洞很容易理解。但是,由于身份验证和安全性之间存在明确的关系,它们通常至关重要。身份验证漏洞可能允许攻击者访问敏感数据和功能。它们还暴露了额外的攻击面,以便进一步利用。因此,了解如何识别和利用身份验证漏洞以及如何绕过常见的保护措施非常重......
  • 什么是JavaScript表达式语句?
    JavaScript语法(三):什么是表达式语句?不知道你有没有注意到,我们在语句部分,讲到了很多种语句类型,但是,其实最终产生执行效果的语句不多。事实上,真正能干活的就只有表达式语句,其它语句的作用都是产生各种结构,来控制表达式语句执行,或者改变表达式语句的意义。今天的课程,我们就深入到......
  • vue3 在 TypeScript 文件中,const route = useRoute();route undefined 不能在顶层作用
    ts文件内部不能使用import{useRoute}from'vue-router';constroute=useRoute();routeundefined在TypeScript文件中,不能在顶层作用域内使用Vue组件的Hooks函数,例如useRoute。Hooks函数只能在Vue组件中使用。如果你想在TypeScript文件中获取当前路由信息,你可......
  • Cesium - Entity 案例01
    constviewer=newCesium.Viewer("cesiumContainer");constblueBox=viewer.entities.add({name:"Bluebox",//位置:(经度,维度)position:Cesium.Cartesian3.fromDegrees(-114.0,40.0,300000.0),box:{//尺寸:长度、宽度和高度的属性。di......
  • Cesium 从某个位置飞到某个位置
    viewer.camera.flyTo({destination:newCesium.Cartesian3(-3961951.575572026,3346492.0945766014,3702340.5336036095),orientation:{direction:newCesium.Cartesian3(0.8982074415844437,-0.4393530288745287,0.013......
  • VideoCrafter2:腾讯AI如何用少量数据生成更清晰视频
    引言去年10月,腾讯发布了VideoCrafter1模型,引起了广泛关注。短短3个月后,腾讯AI实验室再次创新,推出了VideoCrafter2模型。这一次,他们克服了高质量视频扩散模型的数据限制,仅使用有限数据就实现了显著改进,既保留了良好的动态效果,又大幅提升了视频质量。VideoCrafter2模型概述VideoCraft......
  • `glob`和`fnmatch`都是Python的内置模块,用于文件名的匹配,但它们的功能和使用场景有所
    `glob`和`fnmatch`都是Python的内置模块,用于文件名的匹配,但它们的功能和使用场景有所不同²。1.**fnmatch**:`fnmatch`模块提供了一种简单的方式来匹配Unixshell风格的模式,如`*.py`,`Dat[0-9]*`,`Dat[!0-9]*`等²。它只是将一个文件名与模式进行比较,返回True或False²。例如,......
  • Active Directory Group Policy Objects | 活动目录组策略对象 | 介绍 | 配置
    介绍ActiveDirectory(AD)的组策略对象(GroupPolicyObjects,简称GPO),在Windows环境中使用GPO来配置、管理和强制执行网络中的计算机和用户设置。组策略对象(GPO)是策略设置的虚拟集合,GPO具有唯一的名称,例如GUID。组策略设置包含在GPO中,GPO可以表示文档系统和ActiveDirectory......