封闭方法中最后调用异步方法是否有益?以CountAsync场景为例
使用CountAsync()替代Count()的实际益处
先看你提供的API方法代码:
[HttpGet("NumberOnStock")] public async Task<int> NumberOnStock([FromQuery] Guid productId) { return await _context.Products.Where(product => product.Id == productId).CountAsync(); }
针对这个场景,用CountAsync()而非同步的Count()确实有实打实的好处:
不浪费线程池资源:ASP.NET Core靠线程池处理请求,同步
Count()会在等待数据库返回结果时死死占着线程池线程,这个线程啥也干不了只能等。而CountAsync()会在等待期间释放线程,让线程池能用这个线程去处理其他请求,高并发场景下能显著提升应用的吞吐量。契合异步编程的一致性:你的方法已经声明为
async Task<int>,用异步的CountAsync()能保持整个调用链的异步性,避免出现“异步方法里嵌同步阻塞”的反模式,代码逻辑更贴合ASP.NET Core的设计思路。充分利用数据库异步能力:EF Core的
CountAsync()会调用数据库驱动的异步查询接口,比同步调用更高效地利用数据库连接的异步处理机制,减少不必要的资源占用。
哪怕你的方法里只最后调用这一个异步方法,这些优势依然存在,尤其是在高负载的API服务中,异步调用的价值会体现得更明显。
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

