2016-12-26 52 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