C# ASP.NET任务等待Ajax

C# ASP.NET任务等待Ajax,c#,asp.net,ajax,asynchronous,C#,Asp.net,Ajax,Asynchronous,所以,我刚从大学毕业,我只是在学习旧的MVC5 我刚才看了这个,第三点。关于注册用户,我注意到它使用了async: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new Applic

所以,我刚从大学毕业,我只是在学习旧的MVC5

我刚才看了这个,第三点。关于注册用户,我注意到它使用了
async

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser() { UserName = model.UserName };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await SignInAsync(user, isPersistent: false);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            AddErrors(result);
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型)
{
if(ModelState.IsValid)
{
var user=new ApplicationUser(){UserName=model.UserName};
var result=await UserManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
等待信号同步(用户,ispersist:false);
返回重定向到操作(“索引”、“主页”);
}
其他的
{
加法器(结果);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
我只想澄清一点,我熟悉
async
关键字及其与
Task
wait
的关联,您是否有将其用于
Ajax
操作

它可以与
Ajax
操作一起使用吗

如果是这样,我想
Ajax
将是实现它的最佳方式

您必须将其用于Ajax操作吗

不,绝对不是。您可以在AJAX操作中使用同步代码(大多数情况下您可能会这样做):即使服务器线程在后台被阻塞,客户端(浏览器)请求仍然是异步的

它可以用于Ajax操作吗

是的,它可以。在适当的时候。通常允许长时间运行的I/O操作在不阻塞工作线程的情况下完成

在您的示例中,
Register
方法将等待
UserManager.CreateAsync
完成,但同时执行此方法的线程可以自由处理其他请求


这里有一些好消息。

Web代码几乎总是异步的。这是因为IIS在一个池中托管了大量线程,所有线程都在侦听连接。因此,您的代码可以同时在多个线程上运行
async
await
是一种将工作委托给不同线程池并在工作完成时接收响应的方法。它与本机异步ASP.NET管道无关,但可以在管道中使用,以获得额外的性能增益

我也很喜欢这个答案,ashame我不能同时接受这两个答案,但谢谢你的贡献!:)@No1_Melman没问题-我添加了一点额外的细节,希望能够澄清
async
在本例中的用法。