对于代表返回 void 的操作的任务,Task.FromResult<T>() 的替代方法是什么

What is an alternative for Task.FromResult<T>() for tasks that represent operations returning void

return 没有通用类型参数的任务的最佳方法是什么?换句话说,代表不 return 任何东西或 returns void?

的操作的任务

换句话说,我正在寻找以下替代方案:

T value = default(T);
return Task.FromResult<T>(value); // and

var tcs = new TaskCompletionSource<T>();
tcs.SetResult(value);
return tcs.Task;

但是对于表示不应该 return 任何操作的任务。

Task<T> extends Task - 因此通常只使用 Task.FromResult<object> 并提供空结果。例如:

Task ret = Task.FromResult<object>(null);

(或者使用值类型——这真的没多大关系。)

当然,因为任务是不可变的,所以你可以创建这个的单例实例,并且 return 它每次你想要 return 一个 完成的 任务. (我相信这就是 async/await 基础架构所做的,事实上 - 或者至少在测试版中所做的......)

正如 Asad 指出的那样,您可以使用 Task.CompletedTask,但前提是您的目标是 .NET 4.6。 (实际上,不清楚它是否支持 .NET 4.5 - 文档显示“.NET Framework 4.6 和 4.5”作为版本号,但随后说 "Supported in: 4.6"...)

我不确定这是否严格符合惯用语,但我为此使用 Task.CompletedTaskTask.FromResult 是常用的,但在所有情况下,我认为 CompletedTask 的工作方式相同,并且在语义上更有意义。