Task.CompletedTask 的 ValueTask 等价物是什么?

And*_*ndy 16 c# asynchronous task-parallel-library valuetask

我正在实施IAsyncDisposable这要求我返回 a ValueTask,但有时我的 dispose 方法无关。在这种情况下我应该如何返回?

目前我正在返回new ValueTask(Task.CompletedTask)这似乎有效,但由于 valueTasks 的目的是避免创建不必要的堆对象,我相信应该有一种更简单、更有效的方法。

The*_*ias 23

所有结构都有一个默认构造函数。ValueTask创建一个 Completed的默认构造函数ValueTask

var completedValueTask = new ValueTask();
Run Code Online (Sandbox Code Playgroud)

或者:

ValueTask completedValueTask = default;
Run Code Online (Sandbox Code Playgroud)

更新:官方文档已经更新了以下注意事项:

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


Pan*_*ang 6

.NET 5.0:

您可以使用ValueTask.CompletedTask.