Stephen Toub(MSFT)的答复:
如果每次都想要一个新的Task对象,则Task.FromResult是最高效。当前实现中的Task.Delay(0)将返回一个缓存的任务,但这是一个实现细节。如果要使用一项缓存的任务,您应该自己缓存一个任务,例如私人静态只读Task s_completedTask = Task.FromResult(true);然后使用s_completedTask。
Task.FromResult将是最直接的。它还包括一些常见整数等的内建结果。但是,如果您的值不是“显而易见的”值(并且不会进行内建处理),但很可能在您的方案中经常返回-那么您可以创建自己的值将结果缓存在一个字段中(如果合适的话,可以是静态的)-但是缓存Task而不是结果本身很重要。l-否则每次都使用Task.FromResult。
这里有一个小示例,它显示了标记为和未标记为Task.Delay(0)
的方法之间在异常处理方面的区别。
Task.FromResult<bool>(true)
Task.FromResult<bool>(true)
(我的回答async
的交叉发布]