异步/等待的呼叫链...等待等待或返回等待?

Mik*_*keZ 5 c# asynchronous async-await

给定一个异步方法:

public async Task<int> InnerAsync()
{
    await Task.Delay(1000);
    return 123;
}
Run Code Online (Sandbox Code Playgroud)

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

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

private Task<int> IntermediateB()
{
    return InnerAsync();
}
Run Code Online (Sandbox Code Playgroud)

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

是对的吗?

Ham*_*yan 6

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