返回已完成任务的最佳方法是什么?

问题描述 投票:2回答:3

返回已完成的Task对象的最佳方法是什么?

可以写Task,或Task.Delay(0)

但是最有效的方法是什么?

c# .net task-parallel-library .net-4.5 c#-5.0
3个回答
4
投票

Stephen Toub(MSFT)的答复:

如果每次都想要一个新的Task对象,则Task.FromResult是最高效。当前实现中的Task.Delay(0)将返回一个缓存的任务,但这是一个实现细节。如果要使用一项缓存的任务,您应该自己缓存一个任务,例如私人静态只读Task s_completedTask = Task.FromResult(true);然后使用s_completedTask。


4
投票

Task.FromResult将是最直接的。它还包括一些常见整数等的内建结果。但是,如果您的值不是“显而易见的”值(并且不会进行内建处理),但很可能在您的方案中经常返回-那么您可以创建自己的值将结果缓存在一个字段中(如果合适的话,可以是静态的)-但是缓存Task而不是结果本身很重要。l-否则每次都使用Task.FromResult。


0
投票

关于异常行为的注意事项

这里有一个小示例,它显示了标记为和未标记为Task.Delay(0)的方法之间在异常处理方面的区别。

Task.FromResult<bool>(true)
Task.FromResult<bool>(true)

(我的回答async的交叉发布]

© www.soinside.com 2019 - 2024. All rights reserved.