是否可以重复使用通过Task.FromResult创建的相同的Task<T>以用于立即返回的方法(因为它已经完成了)?
我提出此问题的原因是为了减少实现异步接口时产生的垃圾(例如,Task<bool> 就是一个很好的例子,因为它只有两个可能的值)。
根据这篇关于处理任务释放的文章,如果.NET Core的行为与之相同的话,那么重复使用同一任务应该是可能的。
是否可以重复使用通过Task.FromResult创建的相同的Task<T>以用于立即返回的方法(因为它已经完成了)?
我提出此问题的原因是为了减少实现异步接口时产生的垃圾(例如,Task<bool> 就是一个很好的例子,因为它只有两个可能的值)。
根据这篇关于处理任务释放的文章,如果.NET Core的行为与之相同的话,那么重复使用同一任务应该是可能的。
如果你有一小组可能已知同步的结果(从缓存等),强烈建议使用此方法。同样,在Task
(而不是Task<T>
)的情况下,可以使用Task.CompletedTask
。
请注意,如果大多数调用都是同步完成,但你没有一个小的可能结果域,你可能需要考虑使用ValueTask<T>
,这种情况下进行了优化。
所有内容同样适用于.NET和.NET Core。