我们可以说C#async / await模式是某种形式 (智能)糖语法?
因为据我所知,最后,它只是"只是"为程序员隐藏了(内部)工作线程的所有实现。
答案 0 :(得分:6)
是的,await
没有CLR支持。它在编译时消失了。你可以用await
写的任何东西都可以在没有它的情况下写出来。
等待任务,这是一种调用ContinueWith
:*
反编译一个使用await的程序集,看看它是如何工作的。
答案 1 :(得分:1)
async/await
确实是语法糖,然而,它不只是隐藏线程。仅仅因为在方法中使用async
和await
并不意味着您正在创建线程。
来自MSDN文章Live Transactions:
async和await关键字不会导致其他线程 创建。异步方法不需要多线程,因为异步 方法不会在自己的线程上运行。该方法在当前运行 同步上下文并仅在线程上使用时间 方法是有效的。您可以使用Task.Run将CPU绑定的工作移动到 后台线程,但后台线程对进程没有帮助 那只是等待结果可用。