首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚持异步编程

坚持异步编程
EN

Stack Overflow用户
提问于 2022-08-03 19:25:26
回答 1查看 80关注 0票数 1

我正在试着理解async/await in C#。让我们假设我有一个简单的API端点,它将使用EfCore FirstOrDefault扩展方法从数据库的id中获取数据,如下所示:

代码语言:javascript
复制
        [HttpGet]
        [Route("{id:int}")]
        public IActionResult Get(int id)
        {
            var user= userService.GetById(id);
     
            return Ok(user);
        }

使用EfCore FirstOrDefaultAsync并在UserService接口中声明异步方法,是否需要使该方法异步以达到更好的性能?

代码语言:javascript
复制
        [HttpGet]
        [Route("{id:int}")]
        public async Task<IActionResult> Get(int id)
        {
            var user= await userService.GetByIdAsync(id);
     
            return Ok(user);
        }

这个变化有意义吗?如果是或不是,我如何检查?

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 02:03:41

,这种改变有意义吗?

是的,从一般意义上讲。web服务器上的异步是关于可伸缩性的;通过释放本来只是等待I/O的线程,您的服务器可以用更少的线程处理更多的请求。

然而,这并不是“让所有的东西都是异步的,您的服务器将是金色的”语句。例如,如果将单个数据库作为后端(即MSSQL服务器而不是Azure )、(如果大多数/所有请求都以某种方式访问数据库),那么数据库服务器可能会成为您的可伸缩性瓶颈,而不是web服务器。在这种情况下,您可以在整个项目中添加大量的async来发现不需要缩放的东西。

一般来说,我推荐新代码使用async (因为现在它几乎和同步代码一样容易);但是是否值得对旧代码进行现代化是一个只有您能够回答的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73226778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档