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

返回没有generics类型参数的任务的最佳方法是什么? 换句话说,一个任务代表一个不返回任何东西或返回void

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

 T value = default(T); return Task.FromResult(value); // and var tcs = new TaskCompletionSource(); tcs.SetResult(value); return tcs.Task; 

但对于代表不应返回任何内容的操作的任务。

Task扩展了Task – 所以只使用Task.FromResult并提供一个空结果是相当普遍的。 例如:

 Task ret = Task.FromResult(null); 

(或者使用值类型 – 它确实无关紧要。)

当然,由于任务是不可变的,您可以创建一个单例实例,并在每次要返回已完成的任务时返回它。 (我相信这就是异步/等待基础设施所做的事实 – 或者至少在测试版发布中做过……)

正如Asad所说,你可以使用Task.CompletedTask ,但Task.CompletedTask是你的目标是.NET 4.6。 (实际上,目前尚不清楚它是否支持.NET 4.5 – 文档显示“.NET Framework 4.6和4.5”作为版本号,但随后说“支持:4.6”……)

我不确定这是否是严格惯用的,但我使用Task.CompletedTask 。 通常使用Task.FromResult ,但在所有场景中,我都可以认为CompletedTask工作方式相同,并且在语义上更有意义。