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



我最近被问到一个关于.NET WebAPI的面试问题,它是这样的......

访问者:

执行任何异步操作的 WebAPI 控制器操作的方法签名添加async有什么好处吗?

我的回答:

否,因为该方法中没有阻塞代码,这意味着控制器操作应从线程池在其自己的线程中同步运行。这是对的吗?

访问者:

不,实际上不是。

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

进一步澄清这个问题:在这种情况下,负载测试 WebAPI 控制器操作是否会在负载下表现更好,因为它在签名中有一个异步关键字,即使它没有异步代码?

async修饰符本身不执行任何操作。

从文档中:

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

你是对的,async没有await,将是一个在当前线程(不是新线程(上运行的Task,直到最后基本上=同步运行。

如果您真的想考虑所有内容,那么将其标记为异步会增加创建Task的完全可忽略的开销

最新更新