Tho*_*fer 10 .net c# struct asynchronous async-await
为什么awaiters(GetAwaiter - 使类等待)结构而不是类.使用课程有害吗?
public struct ConfiguredTaskAwaiter : ICriticalNotifyCompletion:
Run Code Online (Sandbox Code Playgroud)
public struct YieldAwaiter : ICriticalNotifyCompletion:
Run Code Online (Sandbox Code Playgroud)
public struct TaskAwaiter<TResult> : ICriticalNotifyCompletion
Run Code Online (Sandbox Code Playgroud)
Yuv*_*kov 10
使awaitable成为结构的原因是当编译器在幕后创建状态机时避免不必要的堆分配并最小化内存占用.
这是一个实现细节.等待的类型struct
不是必须的而不是a class
.为了加强这个声明,尝试在Debug
模式中编译Roslyn中的异步方法,你会看到状态机是一个类,其中 - 编译Release
将导致a struct
.更多关于为什么Roslyn中的异步状态机类(而不是结构)?