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

What is the ValueTask equivalent of Task.CompletedTask?

我正在实施 IAsyncDisposable,这需要我 return 一个 ValueTask,但有时我的 dispose 方法无关。在这种情况下我应该如何return?

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

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

var completedValueTask = new ValueTask();

或者:

ValueTask completedValueTask = default;

更新: official documentation 已用以下注释更新:

An instance created with the parameterless constructor or by the default(ValueTask) syntax (a zero-initialized structure) represents a synchronously, successfully completed operation.

.NET 5.0:

您可以使用 ValueTask.CompletedTask.