async await 的 实质 本质

async await  的 实质 就是 用 “状态机” 来 取代 函数嵌套 。

async await  的 本质 是 语法糖,  和 提高性能 什么的 没什么关系 。

为了避免理解歧义, 我把 “状态机” 称为 “控制机” 。

为了实现一个 语言级 的 ,  在 任意代码 中 通用的 异步回调 “变成 同步代码” 的 语法糖,  需要 解决 函数嵌套 的 问题,  即 异步调用 包含在 函数嵌套 中的问题 。

为了解决这个问题, async await 通过 编译器 对 代码 进行了 切割 和 重新整理,  再拼凑起来,  还原出 原本的 代码 执行的效果 。

还原,  就是用 “控制机” 来 对 切割成 “步骤” 的 代码 逐步调用,    所以,  原本代码中的 函数嵌套 被  控制机  取代了 。

对于 控制机 而言, 在 异步调用 的 地方,  可以选择 同步的方式 等待 IO 线程, 也可以选择 异步的方式 把 剩下的“步骤” 放到 IO 线程 的 回调 里 执行,  技术上都可以 。

而 async await 的 性能 相比 普通方法 并没有 提高,  相反还 降低 了 。

可以参考 《后线程时代 的 应用程序 架构》  https://www.cnblogs.com/KSongKing/p/10228842.html

里面有 async await 和 普通方法 的 性能测试 对比 。

原文地址:https://www.cnblogs.com/KSongKing/p/10262654.html

时间: 2024-07-31 10:53:25

async await 的 实质 本质的相关文章

async/await的实质理解

async/await关键字能帮助开发者更容易地编写异步代码.但不少开发者对于这两个关键字的使用比较困惑,不知道该怎么使用.本文就async/await的实质作简单描述,以便大家能更清楚理解. 一.async的实质 async的实质是告诉调用者,async标记的方法可能包含异步代码.具体来说,以wait以分界点,async标记的方法被分为三个片段: static async void TestAsyncMethod() { someCode1(); //片段1 await Thask.Run(.

Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 2.2. 返回值2 2.3. Semaphore 信号量2 2.4. 线程的异常,主线程可以捕获到么2 3. await并不是针对于async的方法,而是针对async方法所返回给我们的Task,2 4. Java里面的task 跟个 await3 5. ---code4 6. async & aw

【转载】async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了.那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有什么区别和特点,本文将会对Thread 到 Task 再到 .NET 4.5的 async和 awa

进阶篇:以IL为剑,直指async/await

接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的写异步操作代码,它本身并不会去创建一个新线程,线程的工作还是由Task来做,async/await只是让开发人员以直观的方式写异步操作代码,而不像以前那样到处都是callback或事件. async/await IL翻译 先写个简单的例子: 1 using System; 2 using Syste

Async/Await 异步编程中的最佳做法

近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支持的信息. 本文旨在作为学习异步编程的“第二步”:我假设您已阅读过有关这一方面的至少一篇介绍性文章. 本文不提供任何新内容,Stack Overflow.MSDN 论坛和 async/await FAQ 这类在线资源提供了同样的建议. 本文只重点介绍一些淹没在文档海洋中的最佳做法. 本文中的最佳做法更大程度上是“指导原则”,而不是实际规则. 其中每个指导原则都有一些例外情况

ASP.NET 上的 Async/Await 简介

原文链接 大多数有关 async/await 的在线资源假定您正在开发客户端应用程序,但在服务器上有 async 的位置吗?可以非常肯定地回答“有”.本文是对 ASP.NET 上异步请求的概念性概述,并提供了对最佳在线资源的引用.我不打算介绍 async 或 await 的语法:因为我已经在一篇介绍性的博客文章 ( bit.ly/19IkogW) 以及一篇关于 async 最佳做法的文章 ( msdn.microsoft.com/magazine/jj991977) 中介绍过了.本文将特别重点介

异步编程中的最佳做法(Async/Await) --转

近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支持的信息. 本文旨在作为学习异步编程的“第二步”:我假设您已阅读过有关这一方面的至少一篇介绍性文章. 本文不提供任何新内容,Stack Overflow.MSDN 论坛和 async/await FAQ 这类在线资源提供了同样的建议. 本文只重点介绍一些淹没在文档海洋中的最佳做法. 本文中的最佳做法更大程度上是“指导原则”,而不是实际规则. 其中每个指导原则都有一些例外情况

async await的前世今生

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了.那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有什么区别和特点,本文将会对Thread 到 Task 再到 .NET 4.5的 async和 awa

async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了.那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有什么区别和特点,本文将会对Thread 到 Task 再到 .NET 4.5的 async和 awa