dependency injectionUserManager正在处理异步调用(ASP.NET CORE)

我正在使用ASP.NET Core及其内置的dependency injection和asp.net身份。

我遇到的问题是每当我尝试通过异步访问任何上下文时(即在此示例中为UserManager ),它在访问时都会被处理掉。

例如,我的控制器在下面(我们关注的对象是UserManager

 private readonly ApplicationDbContext _dbContext; private readonly UserManager _userManager; private readonly ViewRender _view; private readonly IConfiguration _config; public UserController(ApplicationDbContext dbContext, UserManager userManager, ViewRender view, IConfiguration config) { this._dbContext = dbContext; this._userManager = userManager; this._view = view; this._config = config; } 

请注意,正在使用startup.cs中的visual studio模板默认设置注入_userManager

现在在这个控制器的方法中我尝试以下方法:

 [HttpDelete] public async void Delete(string id) { var user = _userManager.Users.Where(a => a.Id == id).FirstOrDefault(); user.Deleted = true; var result= await _userManager.UpdateAsync(user); } 

但是当命中await _userManager.UpdateAsync(user) ,它会调用“对象被丢弃”错误。 我对异步/等待的理解是执行将在等待时停止? 因此控制器不应该在完成之前配置_userManager对象? (显然这种逻辑是错误的)

一个有效的解决方案是不使用aysnc方法,只需调用_userManager.UpdateAsync(user).Result; 但是想了解aysnc / await

更新操作

 [HttpDelete] public async Task Delete(string id) { var user = _userManager.Users.Where(a => a.Id == id).FirstOrDefault(); user.Deleted = true; var result= await _userManager.UpdateAsync(user); } 

为了更好地理解async / await,请阅读本文

Async / Await – 异步编程的最佳实践