JavaScript异步与c#异步

JS的异步操作函数往往是通过回调函数来实现异步任务的结果处理,在ES6之前如setTimeout函数和异步AJAX编程;

在ES6规范后Promise 类对象使得书写异步任务更加容易,返回Promise 的函数是异步操作的基础,

在ES7中增加了async关键字,async关键字修饰的函数返回值是一个Promise 对象,即该函数是一个异步函数,

在async函数中可以使用await表达式,await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用,

正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。

异步概念与语言是无关的:

在JS的async函数中,如果await后是一个Promise对象,await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。

如果await后非 Promise 对象:直接返回对应的值。

也就是说await使得async函数内部是一个同步过程。

而在c#中,await用来等待异步task,当遇到await时,程序的控制权将会回到方法的调用方,如官方例子:

上方代码,main方法调用异步任务方法DownloadDocsMainPageAsync,并命名任务为downloading,DownloadDocsMainPageAsync执行到await时,将控制权交给main方法,main继续执行到await,等待DownloadDocsMainPageAsync执行完毕,最后打印;

 

posted @   路鸣  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示