ValueTask 结构
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供异步操作的可等待结果。
public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask>
public readonly struct ValueTask : IEquatable<System.Threading.Tasks.ValueTask>
type ValueTask = struct
Public Structure ValueTask
Implements IEquatable(Of ValueTask)
- 继承
- 实现
注解
ValueTask实例可以等待或转换为 Task using AsTask。 一个 ValueTask 实例只能等待一次,并且使用者在实例完成之前可能无法调用 GetAwaiter() 。 如果这些限制是不能接受的,请通过调用AsTask将其转换为 。ValueTaskTask
不应对 ValueTask 实例执行以下操作:
- 等待实例多次。
- 多次调用 AsTask 。
- 使用这些技术中的多个技术来使用实例。
如果执行上述任一操作,则结果未定义。
一 ValueTask 个结构可以包装一个 Task 或一个 IValueTaskSource 实例。 返回一个从异步方法包装IValueTaskSource实例的实例ValueTask,使高吞吐量应用程序能够避免使用可重用IValueTaskSource对象的池进行分配。 有关详细信息,请参阅 了解 ValueTask 的原因、内容和时间。
使用而不是ValueTaskTask引入一些开销。 由于 ValueTask 是具有多个字段的结构,因此从方法返回它会导致复制更多数据,而返回单个 Task 引用。 因此,不返回结果的任何异步方法的默认选择应该是返回结果 Task。 仅当性能分析证明值得使用时,才应 ValueTask 使用而不是 Task使用。
Task.CompletedTask当方法同步且成功返回Task时,该属性应用于回退成功完成的单一实例。
Note
从 C# 7.0 开始,支持使用 ValueTask 类型,并且不受Visual Basic的任何版本支持。
Note
使用无参数构造函数或 default(ValueTask) 语法(零初始化结构)创建的实例表示同步、成功完成的操作。
构造函数
| 名称 | 说明 |
|---|---|
| ValueTask(IValueTaskSource, Int16) |
使用表示操作的提供的IValueTaskSource对象初始化类的新实例ValueTask。 |
| ValueTask(Task) |
使用表示操作的提供的任务初始化类的新实例 ValueTask 。 |
属性
| 名称 | 说明 |
|---|---|
| IsCanceled |
获取一个值,该值指示此对象是否表示已取消的操作。 |
| IsCompleted |
获取一个值,该值指示此对象是否表示已完成的操作。 |
| IsCompletedSuccessfully |
获取一个值,该值指示此对象是否表示成功完成的操作。 |
| IsFaulted |
获取一个值,该值指示此对象是否表示失败的操作。 |
方法
| 名称 | 说明 |
|---|---|
| AsTask() | |
| ConfigureAwait(Boolean) |
为此值配置 awaiter。 |
| Equals(Object) |
确定指定的对象是否等于当前 ValueTask 实例。 |
| Equals(ValueTask) | |
| GetAwaiter() |
为此值创建 awaiter。 |
| GetHashCode() |
返回此实例的哈希代码。 |
| Preserve() |
获取一个 ValueTask 可在将来的任何时刻使用。 |
运营商
| 名称 | 说明 |
|---|---|
| Equality(ValueTask, ValueTask) |
比较两 ValueTask 个相等值。 |
| Inequality(ValueTask, ValueTask) |
确定两 ValueTask 个值是否不相等。 |