我正在试着理解async/await in C#。让我们假设我有一个简单的API端点,它将使用EfCore FirstOrDefault扩展方法从数据库的id中获取数据,如下所示:
[HttpGet]
[Route("{id:int}")]
public IActionResult Get(int id)
{
var user= userService.GetById(id);
return Ok(user);
}使用EfCore FirstOrDefaultAsync并在UserService接口中声明异步方法,是否需要使该方法异步以达到更好的性能?
[HttpGet]
[Route("{id:int}")]
public async Task<IActionResult> Get(int id)
{
var user= await userService.GetByIdAsync(id);
return Ok(user);
}这个变化有意义吗?如果是或不是,我如何检查?
发布于 2022-08-04 02:03:41
,这种改变有意义吗?
是的,从一般意义上讲。web服务器上的异步是关于可伸缩性的;通过释放本来只是等待I/O的线程,您的服务器可以用更少的线程处理更多的请求。
然而,这并不是“让所有的东西都是异步的,您的服务器将是金色的”语句。例如,如果将单个数据库作为后端(即MSSQL服务器而不是Azure )、和(如果大多数/所有请求都以某种方式访问数据库),那么数据库服务器可能会成为您的可伸缩性瓶颈,而不是web服务器。在这种情况下,您可以在整个项目中添加大量的async来发现不需要缩放的东西。
一般来说,我推荐新代码使用async (因为现在它几乎和同步代码一样容易);但是是否值得对旧代码进行现代化是一个只有您能够回答的问题。
https://stackoverflow.com/questions/73226778
复制相似问题