我正在尝试理解await Task.CompletedTask
和return
之间的区别,但似乎找不到任何明确定义的解释。
为什么/何时会使用这个:
public async Task Test()
{
await Task.CompletedTask;
}
关于这个问题?
public async Task Test()
{
return;
}
据我所知,两个任务的status
都将被设置为TaskStatus.RanToCompletion
,虽然根据Task.FromResult的说明,这可能与物理时间或类似的东西有关:
当一个任务的返回值在不执行较长的代码路径的情况下立即知道时,通常会使用该方法。
我希望能够清楚地解释一下这一点,因为我已经研究了GitHub上的MS代码、MS文档以及我可以找到的所有链接,但是没有地方给出清晰的解释。我还看到在较大的方法末尾使用await Task.CompletedTask
,根据我从MS on GitHub中找到的一些评论,这实际上是一个错误,因为它不应该包含在内,他们想要将其从存储库中清除。
如果还可以对Task.FromResult
进行清晰的解释(因为它们是兄弟关系),那将不胜感激,因为我仍然不清楚何时使用:
public async Task<bool> Test()
{
return await Task.FromResult(true);
}
超出这个限制:
public async Task<bool> Test()
{
return true;
}
Task.CompletedTask
和Task.FromResult(...)
,而不是等待它们。这样可以让您实现一个返回Task/Task<T>
的方法,而无需使用async
机制。 - Julien Couvreur