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 可以等待,也可以使用 转换为 TaskAsTask。 一个 ValueTask 实例只能等待一次,在实例完成之前,使用者可能不会调用 GetAwaiter() 。 如果这些限制不可接受,请通过调用 AsTaskTask 转换为 ValueTask

永远不要对 ValueTask 实例执行以下操作:

  • 多次等待实例。
  • 多次调用 AsTask
  • 使用其中一种以上的技术来使用 实例。

如果执行上述任一操作,则结果未定义。

ValueTask 一个结构,可以包装 TaskIValueTaskSource 实例。 ValueTask返回从异步方法包装IValueTaskSource实例的 使高吞吐量应用程序能够避免使用可重用IValueTaskSource对象池进行分配。 有关详细信息,请参阅 了解 ValueTask 的原因、内容和时间

ValueTask使用 而不是 会引入一Task些开销。 因为 ValueTask 是一个具有多个字段的结构,因此从 方法返回它会导致复制更多的数据,而返回单个 Task 引用。 因此,对于任何不返回结果的异步方法,默认选择应为返回 Task。 仅当性能分析证明它值得时, ValueTask 才应使用 而不是 Task。 在 Task.CompletedTask 返回 的方法同步且成功完成的情况下,应使用 属性回退成功完成的单一 Task 实例。

注意

从 C# 7.0 开始,支持使用该 ValueTask 类型,任何版本的 Visual Basic 都不支持。

注意

使用无参数构造函数或语法 default(ValueTask) 创建的实例 (零初始化结构) 表示同步且成功完成的操作。

构造函数

ValueTask(IValueTaskSource, Int16)

使用提供的表示操作的 IValueTaskSource 对象初始化 ValueTask 类的新实例。

ValueTask(Task)

使用提供的表示操作的任务初始化 ValueTask 类的新实例。

属性

CompletedTask

获取一个已成功完成的任务。

IsCanceled

获取指示此对象是否表示取消的操作的值。

IsCompleted

获取指示此对象是否表示完成的操作的值。

IsCompletedSuccessfully

获取指示此对象是否表示成功完成的操作的值。

IsFaulted

获取指示此对象是否表示失败的操作的值。

方法

AsTask()

检索表示此 ValueTaskTask 对象。

ConfigureAwait(Boolean)

为此值配置一个 awaiter。

Equals(Object)

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

Equals(ValueTask)

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

FromCanceled(CancellationToken)

创建 ValueTask,它因指定的取消标记进行的取消操作而完成。

FromCanceled<TResult>(CancellationToken)

创建 ValueTask<TResult>,它因指定的取消标记进行的取消操作而完成。

FromException(Exception)

创建 ValueTask,它是以指定的异常来完成的。

FromException<TResult>(Exception)

创建 ValueTask<TResult>,它是以指定的异常来完成的。

FromResult<TResult>(TResult)

创建指定结果的、成功完成的 ValueTask<TResult>

GetAwaiter()

为此值创建一个 awaiter。

GetHashCode()

返回此实例的哈希代码。

Preserve()

获取将来随时可用的 ValueTask

运算符

Equality(ValueTask, ValueTask)

比较两个 ValueTask 值以判断是否相等。

Inequality(ValueTask, ValueTask)

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

适用于