118 votes

Quel est l'avantage de l'utilisation asynchrone avec MVC5?

Quelle est la différence entre:

public ActionResult Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        IdentityResult result = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
        if (result.Success)
        {
            return Redirect("~/home");
        }
        else
        {
            AddErrors(result);
        }
    }
    return View(model);
}

et:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        IdentityResult result = await IdentityManager.Authentication.CheckPasswordAndSignInAsync(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
        if (result.Success)
        {
            return Redirect("~/home");
        }
        else
        {
            AddErrors(result);
        }
    }
    return View(model);
}

Je vois que le MVC code a maintenant async mais quelle est la différence. Donner de bien meilleures performances que les autres? Est-il plus facile de déboguer des problèmes avec l'un qu'à l'autre? Dois-je apporter des modifications à d'autres contrôleurs pour mon application pour ajouter Asynchrone ?

167voto

Darin Dimitrov Points 528142

Les actions asynchrones sont utiles uniquement lorsque vous effectuez I/O bound des opérations telles que la distance des appels au serveur. L'avantage de l'appel asynchrone est que lors de l'opération d'e/S, pas de ASP.NET thread de travail est utilisé. Voici comment le premier exemple de travaux:

  1. Lorsqu'une demande de hits de l'action, ASP.NET prend un fil de la piscine et commence à s'exécuter.
  2. L' IdentityManager.Authentication.CheckPasswordAndSignIn méthode est invoquée. C'est un appel de blocage -> pendant tout l'appel le thread de travail est mis en péril.

Et voici comment l'appel de la deuxième fonctionne:

  1. Lorsqu'une demande de hits de l'action, ASP.NET prend un fil de la piscine et commence à s'exécuter.
  2. L' IdentityManager.Authentication.CheckPasswordAndSignInAsync est appelé, ce qui revient immédiatement. Une fin d'e/S Port est enregistré et l'ASP.NET thread de travail est libéré pour le pool de threads.
  3. Plus tard, lorsque l'opération est terminée, la fin d'e/S du port est signalé, un autre thread est établi à partir du pool de threads pour finir le retour de la vue.

Comme vous pouvez le voir dans le second cas ASP.NET les threads sont utilisés seulement pour une courte période de temps. Cela signifie qu'il y a plus de threads disponibles dans la piscine pour servir à d'autres demandes.

Alors, pour conclure, l'utilisation des actions asynchrones uniquement lorsque vous avez une vraie API asynchrone à l'intérieur. Si vous faites un appel de blocage à l'intérieur d'une action asynchrone, vous sont en train de tuer l'ensemble de la prestation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X