我正在使用ASP.NET Core及其内置的依赖注入和asp.net身份。
我遇到的问题是,每当我尝试通过异步访问任何上下文时(例如在此示例中为UserManager<ApplicationUser>
),它就会在访问时被处理掉。
例如,我的控制器在下面(我们关注的对象是UserManager
)
private readonly ApplicationDbContext _dbContext;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ViewRender _view;
private readonly IConfiguration _config;
public UserController(ApplicationDbContext dbContext,
UserManager<ApplicationUser> 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)
被点击时,它会调用“对象被处置”错误。我对async / await的理解是执行将在等待时停止?因此,控制器在完成之前不应处置_userManager
个对象? (显然这种逻辑是错误的)
有效的解决方案是不使用aysnc方法并只调用_userManager.UpdateAsync(user).Result;
但想了解aysnc / await
答案 0 :(得分:2)
更新操作以使Task
返回类型而不是void
:
[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,请阅读本文