async await传染性
async/await具有传染性其实指的是你需要把异步函数的结果包装在 Task 类型当中。
之所以c#要加async的主要原因是之前的await不是关键字,老代码可能会把await作为变量名,为了兼容性才加了async明确标识函数是continuation。
await不能省略,在语义上有违直觉,为什么Task
几个关键词的区别:同步、异步、串行、并行、并发。以及async和串行不冲突以及异步不一定拖累性能。
同步异步
同步准确的含义是,一旦发起调用,调用者一定等待被调用任务结束后再继续执行。异步则打破了这一点,发起调用后,调用者可以立即向后执行,简单点也可以理解成被调用者无返回值,其执行结果往往通过其他方式,比如异步回调来收集(当然也是有其他方式的,比如消息队列、协程管道、进程邮箱等等都是可选手段之一)。
串行并行
串行为一个个任务依次执行,并行为可以多个任务同时执行。
并发
简单来说就是同时存在、同时发生。虽然执行者只有一个人,但完全可以几件事情交替执行。
async/await本质是异步,其关注的是调用或者任务的顺序。async修饰的方法执行后并没有返回(但有没有发起执行则不一定),调用者调用后立刻就向后执行了。async实际真正需要返回的只是一个Awaitable/Thenable异步回调的包装。核心是异步回调的语法糖。
标签:异步,调用,调用者,c#,await,async,执行 From: https://www.cnblogs.com/Small-Carp/p/18435380