2014-05-07 9 views
8

Ich bin nur neugierig, warum die ASP.NET MVC Website Vorlage die asynchronen Methoden für ASP.net Identity verwendet? Sie scheinen nichts zu tun, was von asynchronen Methoden profitieren würde.Warum verwendet die Standard-MVC-Site asynchrone ASP.net-Identität?

Zum Beispiel, warum verwenden:

IdentityResult result = 
    await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey)); 

Statt:

IdentityResult result = 
    UserManager.RemoveLogin(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey)); 

Sind sie nicht genau die gleiche Sache zu tun? In beiden Fällen warten Sie auf die IdentityResult, bevor Sie mit der nächsten Codezeile fortfahren, richtig?

+3

Ich bin mir nicht sicher, dass Sie das gesehen haben, aber diese Frage wurde von @StephenCleary http://stackoverflow.com/questions/10960998/how-different-async-programming-is-from-threads beantwortet. Und die Antwort ist ziemlich gut. – milagvoniduak

Antwort

6

Korrekt, Sie warten auf die Rückgabe von RemoveLoginAsync, bevor Sie die nächste Codezeile ausführen. Es gibt jedoch einen Vorteil, dies zu tun ...

Während der RemoveLoginAsync ausgeführt wird, wird es den Thread nicht sperren (weil es async ist). Wenn Sie zum Beispiel im zweiten Beispiel 4 Threads für Ihre App zur Verfügung haben und 4 Anfragen eingehen, die alle auf einen synchronen Aufruf warten, werden zusätzliche Anfragen in eine Warteschlange eingereiht, bevor sie verarbeitet werden können.

Wenn Sie jedoch während des Wartens einen asynchronen Anruf haben, wird dieser Thread freigegeben, um weitere Anfragen zu verarbeiten.

Verwandte Themen