ValueTask 结构

定义

提供异步操作的可等待结果。

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
实现

注解

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()

检索一个 Task 表示此 ValueTask对象的对象。

ConfigureAwait(Boolean)

为此值配置 awaiter。

Equals(Object)

确定指定的对象是否等于当前 ValueTask 实例。

Equals(ValueTask)

确定指定的 ValueTask 对象是否等于当前 ValueTask 对象。

GetAwaiter()

为此值创建 awaiter。

GetHashCode()

返回此实例的哈希代码。

Preserve()

获取一个 ValueTask 可在将来的任何时刻使用。

运营商

名称 说明
Equality(ValueTask, ValueTask)

比较两 ValueTask 个相等值。

Inequality(ValueTask, ValueTask)

确定两 ValueTask 个值是否不相等。

适用于