我有一个这样的用户 Controller :
public class UserController : ControllerBase
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public async Task<User> Get(int id, CancellationToken cancellationToken)
{
return await _userService.GetUserById(id, cancellationToken);
}
}
和用户服务:
public class UserService : IUserService
{
public async Task<User> GetUserById(int id, CancellationToken cancellationToken)
{
return await _dbContext.Users.Where(a => a.Id == id).FirstOrDefaultAsync(cancellationToken);
}
}
在 UserService
我有一个 async
通过 Id
返回用户的方法.
我的问题是,我们是否需要使用 async/await
controller
中的关键字或使用 async/await
在 UserService
够了吗?
public class UserController : ControllerBase
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public Task<User> Get(int id, CancellationToken cancellationToken)
{
return _userService.GetUserById(id, cancellationToken);
}
}
最佳答案
如果您只等待一件事,作为 async
方法的最后一行,并直接返回或根本不返回结果(即不对结果做任何重要的事情),然后yes,您可以通过删除 async
和 await
部分来省略 await
;这避免了一些机械,但是这意味着如果你调用的方法同步(特别是:它抛出一个异常而不是返回一个报告错误的任务state),那么异常的表现会略有不同。
避免这个状态机可能很重要如果你在一个内部循环中,例如在每个操作被多次调用的 IO 代码中间,你需要优化它,但是:这不适用于此处-您位于 Controller 的顶部。老实说,它不需要优化:只需使用 async
/await
:它会更一致地正确。
关于c# - 我们需要在 Controller 中使用 async/await 关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68177609/