Cer*_*Cer 2 c# async-await asp.net-mvc-5
我知道异步方法的逻辑,但我不明白以下方法如何给我带来好处。以下异步方法与同步方法不同吗?
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Manage");
}
if (ModelState.IsValid)
{
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure");
}
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
AddErrors(result);
}
ViewBag.ReturnUrl = returnUrl;
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
要了解这种做法的好处,首先我们需要了解 ASP.NET 生命周期的工作原理。
每次我们向服务器发出请求时,管道都会检索一个线程池线程来处理它,并且与每个资源一样,线程池中可用于此目的的线程数量是有限的。
一些操作,例如 I/O 或数据库操作,通常会阻塞处理,持续时间比预期的要长。
当管道达到可用资源的限制时,它所能做的就是等待其中一些资源被释放,以便它可以处理新的请求。
当等待/异步方法开始起作用时,由于其内部工作原理,运行时可以异步处理这些任务,释放线程池线程以处理另一个请求,而前一个请求被阻塞。这通常会导致使用相同的可用资源获得更高的总吞吐量,但代价是每个请求的处理成本略高。
这里有一个简单的解释。
我希望它能帮助你。
| 归档时间: |
|
| 查看次数: |
3822 次 |
| 最近记录: |