对于表示返回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
(或者使用值类型 – 它确实无关紧要。)
当然,由于任务是不可变的,您可以创建一个单例实例,并在每次要返回已完成的任务时返回它。 (我相信这就是异步/等待基础设施所做的事实 – 或者至少在测试版发布中做过……)
正如Asad所说,你可以使用Task.CompletedTask
,但Task.CompletedTask
是你的目标是.NET 4.6。 (实际上,目前尚不清楚它是否支持.NET 4.5 – 文档显示“.NET Framework 4.6和4.5”作为版本号,但随后说“支持:4.6”……)
我不确定这是否是严格惯用的,但我使用Task.CompletedTask
。 通常使用Task.FromResult
,但在所有场景中,我都可以认为CompletedTask
工作方式相同,并且在语义上更有意义。