gpt4 book ai didi

c# - 为什么 Awaiters (async/await) 是结构体而不是类?可以使用类吗?

转载 作者:行者123 更新时间:2023-12-01 23:52:34 27 4
gpt4 key购买 nike

为什么等待者(GetAwaiter - 使类可等待)是结构而不是类。使用类有什么坏处吗?

public struct ConfiguredTaskAwaiter : ICriticalNotifyCompletion:

http://referencesource.microsoft.com/#mscorlib/system/runtime/compilerservices/TaskAwaiter.cs#b8626cdb2f1cbe65

public struct YieldAwaiter : ICriticalNotifyCompletion:

http://referencesource.microsoft.com/#mscorlib/system/runtime/compilerservices/YieldAwaitable.cs#1e1219f924e9e3b7

public struct TaskAwaiter<TResult> : ICriticalNotifyCompletion

http://referencesource.microsoft.com/#mscorlib/system/runtime/compilerservices/TaskAwaiter.cs#2c48fb3bdfc69022

最佳答案

将awaitables设置为结构体的原因是为了避免不必要的堆分配,并在编译器在后台创建状态机时最大限度地减少内存占用。

这是一个实现细节。可等待对象不必是 struct 类型而不是 class 类型。为了强化这一点,尝试在 Roslyn 中以 Debug 模式编译异步方法,你会看到状态机是一个类,而在 Release 模式下编译将结果是一个结构。有关更多信息,请参阅 Why are async state machines classes (and not structs) in Roslyn?

关于c# - 为什么 Awaiters (async/await) 是结构体而不是类?可以使用类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com