async/await 在 C# 语言中是如何工作的?(中)
原文中文,约27800字,阅读约需66分钟。发表于: 。点击上方蓝字关注我们(本文阅读时间:25分钟)接《async/await 在 C# 语言中是如何工作的?(上)》,今天我们继续介绍C#迭代器和async/await under the covers。C# 迭代器这个解决方案的伏笔实际上是在 Task 出现的几年前,即 C# 2.0,当时它增加了对迭代器的支持。迭代器允许你编写一个方法,然后由编译器用来实现 IEnumerable<T&...
本文介绍了C#异步编程的实现原理,包括async/await的状态机重写、AsyncTaskMethodBuilder的使用、ExecutionContext的传递和awaiter模式的实现。编译器生成一个名为<CopyStreamToStreamAsync>d__0的结构体来跟踪异步方法的位置和状态。使用awaiter模式为任务挂上延续,状态机结构体从栈提升到堆,并捕获正确的上下文。