2

这是我删除用户的操作方法: 我觉得它是阻塞的,因为我正在使用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");
}
4

1 回答 1

2

你是对的。使用user.Result传递实际对象会阻塞异步方法。

使用的最佳实践asyncawait通过方法一直使用。不要混合阻塞和异步代码

// 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");
}

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

于 2016-04-17T03:42:11.310 回答