将异步放在不执行等待操作的WebAPI控制器操作上有什么好处?

时间:2018-06-28 21:35:48

标签: c# asp.net-web-api

最近有人问我一个.NET WebAPI的面试问题,结果就这样...

采访者:“向不执行任何异步操作的WebAPI控制器操作的方法签名中添加“异步”有什么好处?”

我的答案:“不,因为该方法中没有阻塞代码,这意味着控制器操作应在线程池中的自己线程中同步运行。那是正确的吗?”

INTERVIWER:“不,实际上不是。”

...

我已经在网上搜索了大约15-20分钟,以找到一个结论性的答案,但对答案并没有完全满意...那么,我是对的还是面试官是对的?

感谢进阶!

编辑:

要进一步阐明问题:在这种情况下,即使没有签名,即使负载中有async关键字,对WebAPI控制器动作进行负载测试也会在负载下表现更好吗?

2 个答案:

答案 0 :(得分:2)

async本身没有任何作用。

来自docs

  

如果async关键字修改的方法不包含await表达式或语句,则该方法将同步执行。编译器警告您任何不包含async语句的await方法,因为这种情况可能表示错误。

答案 1 :(得分:0)

您是正确的,没有async的{​​{1}}将是await在当前线程(不是新线程)上运行,直到最后基本上=同步运行。

如果您真的想考虑所有内容,则将其标记为异步将增加创建Task

的可忽略的开销