【发布时间】:2024-04-23 23:30:01
【问题描述】:
给定一个异步方法:
public async Task<int> InnerAsync()
{
await Task.Delay(1000);
return 123;
}
通过中间方法调用,中间方法是等待异步方法IntermediateA还是仅仅返回TaskIntermediateB?
public async Task<int> IntermediateA()
{
return await InnerAsync();
}
private Task<int> IntermediateB()
{
return InnerAsync();
}
据我所知,调试器似乎两者的工作方式完全相同,但在我看来,IntermediateB 应该通过避免在状态机中再输入一个 await 来获得更好的性能。
是吗?
【问题讨论】:
-
区别在于异常处理。为了更好地理解这一点,我建议你尝试从内部函数中抛出一个异常,看看事情是如何工作的。
-
谢谢。我根本没有考虑异常处理。
-
“在我看来 IntermediateB 应该表现更好” - 是的,但差异将是几纳秒。它还可以在生成的二进制文件中节省几十个字节。
-
我建议你阅读Eliding Async and Await
标签: c# asynchronous async-await