【发布时间】:2021-01-01 06:11:28
【问题描述】:
我试图了解await Task.CompletedTask 和return 之间的区别,但似乎找不到任何明确定义的解释。
你为什么/什么时候使用这个:
public async Task Test()
{
await Task.CompletedTask;
}
这个?
public async Task Test()
{
return;
}
据我了解,两者的status 都将设置为TaskStatus.RanToCompletion,尽管根据Task.FromResult 的解释,我觉得这可能与物理时间或类似的东西有关:
该方法通常用于任务的返回值立即知道而无需执行更长的代码路径的情况。
如果我研究了 GitHub 上的 MS 代码、MS Docs 以及我能找到的每个链接,我将不胜感激,但它在任何地方都没有给出明确的解释。我还在较大的方法末尾看到await Task.CompletedTask,根据我从MS on GitHub 找到的一些cmets 实际上是错误的,因为它不应该包含它,他们希望将其从repo 中清除。
如果还对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机制的方法。 -
谢谢,这绝对有帮助。那么当你使用 async/await 时,你只需要返回/返回值而不是 Task?
标签: c# async-await task-parallel-library