给出异步方法:
public async Task<int> InnerAsync()
{
await Task.Delay(1000);
return 123;
}
通过中间方法调用它,中间方法是等待异步方法IntermediateA
还是只返回任务IntermediateB
?
public async Task<int> IntermediateA()
{
return await InnerAsync();
}
private Task<int> IntermediateB()
{
return InnerAsync();
}
最好我可以告诉调试器,两者看起来完全相同,但在我看来,IntermediateB应该通过避免在状态机中等待一个等待条目来表现更好。
是吗?
答案 0 :(得分:6)
这两种方法存在细微差别。如果await
任务失败,则该异常将在该方法中抛出,但如果您认为该方法然后await
认为该方法,那么异常将在consumer方法中抛出。另一个区别是更罕见的,在消费者等待任务的情况下,如果它发生延迟,则任务可以在等待点完成并绕过状态机。