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执行完毕,最后打印;
博客备忘,一起成长。