最近有人问我一个.NET WebAPI的面试问题,结果就这样...
采访者:“向不不执行任何异步操作的WebAPI控制器操作的方法签名中添加“异步”有什么好处?”
我的答案:“不,因为该方法中没有阻塞代码,这意味着控制器操作应在线程池中的自己线程中同步运行。那是正确的吗?”
INTERVIWER:“不,实际上不是。”
...
我已经在网上搜索了大约15-20分钟,以找到一个结论性的答案,但对答案并没有完全满意...那么,我是对的还是面试官是对的?
感谢进阶!
编辑:
要进一步阐明问题:在这种情况下,即使没有签名,即使负载中有async关键字,对WebAPI控制器动作进行负载测试也会在负载下表现更好吗?
答案 0 :(得分:2)
async
本身没有任何作用。
来自docs:
如果
async
关键字修改的方法不包含await
表达式或语句,则该方法将同步执行。编译器警告您任何不包含async
语句的await
方法,因为这种情况可能表示错误。
答案 1 :(得分:0)
您是正确的,没有async
的{{1}}将是await
在当前线程(不是新线程)上运行,直到最后基本上=同步运行。
如果您真的想考虑所有内容,则将其标记为异步将增加创建Task