为什么此代码使用异步方法?

时间:2018-07-09 13:58:53

标签: c# async-await

遇到此代码时,我正在阅读有关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方法呢?使用异步方法并等待它的背后有什么区别,优势或原因?
谢谢

1 个答案:

答案 0 :(得分:8)

delete[]free()的全部要点是可以说:“我在这里无法取得有用的进展,因此也许可以找到我正在使用的线程来做一些有用的工作其他地方。”

两个版本(您所显示的内容和可能的同步版本)都是“阻止”的,但其中一个版本(async版本)确实是这样做的,而没有占用线程不做任何事情有用。等待对象完成工作后,将找到一个合适的线程(在这种情况下,任何线程池线程都是合适的)来恢复处理请求的工作。