删除具有 ASP.NET 身份 3.x 的用户的操作方法
Action method to delete a user with ASP.NET Identity 3.x
这是我删除用户的操作方法:
我觉得它正在阻塞,因为我正在使用 user.Result
将实际用户对象从一个异步结果传递到下一个异步方法。有更好的方法吗?
// POST: Users/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var user = _userManager.FindByIdAsync(id.ToString());
var result = await _userManager.DeleteAsync(user.Result);
return RedirectToAction("Index");
}
你是对的。使用 user.Result
传递实际对象会阻塞异步方法。
使用 async
的最佳做法是在整个方法中一直使用 await
。 不要混用阻塞代码和异步代码。
// POST: Users/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id) {
var user = await _userManager.FindByIdAsync(id.ToString());
var result = await _userManager.DeleteAsync(user);
return RedirectToAction("Index");
}
来源 - Async/Await - Best Practices in Asynchronous Programming
这是我删除用户的操作方法:
我觉得它正在阻塞,因为我正在使用 user.Result
将实际用户对象从一个异步结果传递到下一个异步方法。有更好的方法吗?
// POST: Users/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var user = _userManager.FindByIdAsync(id.ToString());
var result = await _userManager.DeleteAsync(user.Result);
return RedirectToAction("Index");
}
你是对的。使用 user.Result
传递实际对象会阻塞异步方法。
使用 async
的最佳做法是在整个方法中一直使用 await
。 不要混用阻塞代码和异步代码。
// POST: Users/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id) {
var user = await _userManager.FindByIdAsync(id.ToString());
var result = await _userManager.DeleteAsync(user);
return RedirectToAction("Index");
}
来源 - Async/Await - Best Practices in Asynchronous Programming