gpt4 book ai didi

c# - 我们需要在 Controller 中使用 async/await 关键字吗?

转载 作者:行者123 更新时间:2023-12-04 00:48:59 25 4
gpt4 key购买 nike

我有一个这样的用户 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/awaitUserService够了吗?

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,您可以通过删除 asyncawait 部分来省略 await;这避免了一些机械,但是这意味着如果你调用的方法同步(特别是:它抛出一个异常而不是返回一个报告错误的任务state),那么异常的表现会略有不同。

避免这个状态机可能很重要如果你在一个内部循环中,例如在每个操作被多次调用的 IO 代码中间,你需要优化它,但是:这不适用于此处-您位于 Controller 的顶部。老实说,它不需要优化:只需使用 async/await:它会更一致地正确。

关于c# - 我们需要在 Controller 中使用 async/await 关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68177609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com