对于代表返回 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.CompletedTask
。 Task.FromResult
是常用的,但在所有情况下,我认为 CompletedTask
的工作方式相同,并且在语义上更有意义。
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.CompletedTask
。 Task.FromResult
是常用的,但在所有情况下,我认为 CompletedTask
的工作方式相同,并且在语义上更有意义。