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
可以等待,也可以使用 转换为 TaskAsTask。 一个 ValueTask
实例只能等待一次,在实例完成之前,使用者可能不会调用 GetAwaiter() 。 如果这些限制不可接受,请通过调用 AsTask将 Task 转换为 ValueTask
。
永远不要对 ValueTask
实例执行以下操作:
- 多次等待实例。
- 多次调用 AsTask 。
- 使用其中一种以上的技术来使用 实例。
如果执行上述任一操作,则结果未定义。
是 ValueTask
一个结构,可以包装 Task 或 IValueTaskSource 实例。
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() | |
ConfigureAwait(Boolean) |
为此值配置一个 awaiter。 |
Equals(Object) |
确定指定对象是否与当前的 ValueTask 实例相等。 |
Equals(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 值是否不相等。 |