Yuv*_*kov 10

使awaitable成为结构的原因是当编译器在幕后创建状态机时避免不必要的堆分配并最小化内存占用.

这是一个实现细节.等待的类型struct不是必须的而不是a class.为了加强这个声明,尝试在Debug模式中编译Roslyn中的异步方法,你会看到状态机是一个类,其中 - 编译Release将导致a struct.更多关于为什么Roslyn中的异步状态机类(而不是结构)?

  • 它也可以是`接口`,只要它具有`GetAwaiter`方法并且返回类型满足要求.实际上,因为允许使用`GetAwaiter`方法作为扩展方法,所以你甚至可以通过使用正确的返回类型编写一个名为`GetAwaiter`的扩展方法来制作像enums _awaitable_这样的"疯狂"类型.这只是一种好奇心,而不是我推荐在实践中使用的东西. (2认同)