c# – 异步/等待的呼叫链…等待等待或等待等待?

给定一个异步方法:

public async Task<int> InnerAsync()
{
    await Task.Delay(1000);
    return 123;
}

并通过中间方法调用它,中间方法是等待异步方法IntermediateA还是只返回Task IntermediateB?

public async Task<int> IntermediateA()
{
    return await InnerAsync();
}

private Task<int> IntermediateB()
{
    return InnerAsync();
}

我可以告诉调试器,两者看起来完全相同,但在我看来,IntermediateB应该通过避免在状态机中再等待一个条目来表现更好.

是对的吗?

最佳答案
这两种方法存在细微差别.如果您等待失败的任务,则该异常将在该方法中抛出,但如果您将该方法传递给该方法然后等待它,那么异常将在consumer方法中抛出.另一个区别更为罕见,如果消费者等待任务,并且如果延迟发生,则可以在等待点完成任务并绕过状态机.

转载注明原文:c# – 异步/等待的呼叫链…等待等待或等待等待? - 代码日志