繁体   English   中英

async / await - 这种理解是否正确?

[英]async/await - Is this understanding correct?

经过两个问题和很多混乱 - 我想知道我是否最终做对了。 这是我的理解:

async/await 用于一个目的 - 允许在完成异步任务后执行代码。 例如

async Task CallerMethod()
{
     await AsyncMethod();
     AnotherMethod();
}

允许AnotherMethod异步后执行AsyncMethod 完成 ,而不是后立即AsyncMethod 开始

async / await NEVER 使任何异步。 它不会启动一个单独的线程(当然,除非等待的方法是这样做的),等等。

我的理解(最后)是否正确?

虽然斯蒂芬的答案是正确的,但我想确保你有一些额外的要点。

async / await NEVER使任何异步

它使CallerMethod成为一种异步方法。 CallerMethod返回一个本身可以等待的TaskCallerMethodCallerMethod工作完成之前返回该任务,因此它是一个异步方法。

它不会使AsyncMethod异步; 它已经是异步的。

它不会启动单独的线程

对。 这是混淆的常见原因。 线程是并发的一个单元,它只是一种异步。 类比通常有帮助。 你可以把面包放在烤面包机里,等待它烤好,然后做成鸡蛋。 你可以将面包放在烤面包机里,在吐司烘烤的同时煮鸡蛋,然后在鸡蛋完成后处理吐司。 或者你可以雇两个厨师,一个煮鸡蛋,一个做烤面包。 第一种是同步处理。 第二个和第三个是异步的,但只有第三个是并发的。 请注意,第三种解决方案是最昂贵的; 线程是工人,工人也不便宜。

什么使异步方法异步并不是它是并发的 - 虽然它可能是。 使它异步的原因在于它为您提供了一种机制,允许您在等待其工作完成时执行其他操作 await只是一种愉快的方式来写“这是我希望你在任务成功完成后运行的代码”。

async / await NEVER使任何异步。 它不会启动一个单独的线程(当然,除非等待的方法是这样做的),等等。

是。

换句话说, async / await允许从异步角度编写代码。 也就是说,代码可以“异步等待”( await )操作完成,然后定义自己的异步操作(从async方法返回的任务,表示该方法的执行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM