await Task.CompletedTask vs return

27 浏览
0 Comments

await Task.CompletedTask vs return

我试图理解await Task.CompletedTaskreturn之间的区别,但似乎找不到明确的解释。

为什么/何时会使用这个:

public async Task Test()
{
    await Task.CompletedTask;
}

而不是这个?

public async Task Test()
{
    return;
}

据我理解,两者的status都将设置为TaskStatus.RanToCompletion,尽管根据来自Task.FromResult的解释,我有种感觉可能与物理时间或类似的东西有关:

当任务的返回值在不执行较长代码路径的情况下立即可知时,该方法通常被使用。

如果能清楚地解释一下这个问题,我会非常感激,因为我已经研究了GitHub上的MS代码、MS文档以及我能找到的所有链接,但没有地方给出明确的解释。我还在较大的方法末尾看到await Task.CompletedTask,根据我在GitHub上的MS评论中找到的一些评论,这实际上是错误的,因为它不应该包含在其中,他们希望将其从存储库中清除。

如果还能对Task.FromResult进行明确解释(因为它们是同级的),我也会非常感激,因为我对何时使用以下内容仍然不清楚:

public async Task Test()
{
    return await Task.FromResult(true);
}

而不是这个:

public async Task Test()
{
    return true;
}

0