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 @ 2022-10-09 13:34  路鸣  阅读(150)  评论(0编辑  收藏  举报