20

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

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

4

2 回答 2

30

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

var completedValueTask = new ValueTask();

或者:

ValueTask completedValueTask = default;

更新:官方文档已更新为以下注释:

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

于 2020-03-28T10:19:58.583 回答
9

.NET 5.0:

您可以使用ValueTask.CompletedTask.

于 2021-03-08T06:19:09.110 回答