2016-12-26 94 views
3

我正在使用ASP.NET Core,内置依赖注入和asp.net标识。依赖注入UserManager正在处理异步调用(ASP.NET CORE)

我遇到的问题是每当我尝试访问任何上下文的异步(即在此示例中为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; 
} 

通知之_userManager正在使用startup.cs

Visual Studio的模板默认设置现在注入在此控制器中的一种方法中,我尝试以下操作:

[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溶液/等待

+1

重构删除操作是是'异步塔斯k 删除(string id){... return Ok(); }' – Nkosi

+0

但在这种特殊情况下,我不希望该方法返回任何东西? – michael

+0

然后使用'异步任务'这意味着一个无效的方法 – Nkosi

回答

1

更新行动

[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 - Best Practices in Asynchronous Programming