遇到此代码时,我正在阅读有关Microsoft身份的article:
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded) {
//.. REDUCTED .. //
}
}
我想知道为什么这段代码使用CreateAsync
并等待而不是使用同步方法吗?
现在,此操作一直阻塞到CreateAsync
返回为止,为什么不使用sync方法呢?使用异步方法并等待它的背后有什么区别,优势或原因?
谢谢
答案 0 :(得分:8)
delete[]
和free()
的全部要点是可以说:“我在这里无法取得有用的进展,因此也许可以找到我正在使用的线程来做一些有用的工作其他地方。”
两个版本(您所显示的内容和可能的同步版本)都是“阻止”的,但其中一个版本(async
版本)确实是这样做的,而没有占用线程不做任何事情有用。等待对象完成工作后,将找到一个合适的线程(在这种情况下,任何线程池线程都是合适的)来恢复处理请求的工作。