2014-05-07 11 views
8

Po prostu ciekawi mnie, dlaczego szablon witryny ASP.net MVC wykorzystuje metody asynchroniczne dla tożsamości ASP.net? Wydaje się, że nie robią niczego, co mogłoby skorzystać na wykorzystaniu metod asynchronicznych.Dlaczego domyślna strona MVC używa asynchronicznej tożsamości ASP.net?

Na przykład, dlaczego używać:

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

Zamiast:

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

Czy oni nie robią dokładnie to samo? W obu przypadkach czeka na IdentityResult przed przejściem do następnego wiersza kodu, prawda?

+3

Nie jestem pewien, czy widziałeś to, ale na te pytania odpowiedział @StephenCleary http://stackoverflow.com/questions/10960998/how-different-async-programming-is-from-threads. Odpowiedź jest całkiem dobra. – milagvoniduak

Odpowiedz

6

Prawidłowo, czekając na powrót funkcji RemoveLoginAsync przed wykonaniem następnego wiersza kodu. Jednak przynosi to korzyść ...

Podczas wykonywania czynności RemoveLoginAsync nie zablokuje ona nici (ponieważ jest asynchroniczna). Na przykład w drugim przykładzie, jeśli masz 4 wątki dostępne dla aplikacji i 4 żądania przychodzą, wszystkie oczekują na wywołanie synchroniczne, wtedy dodatkowe żądania będą wprowadzane do kolejki, zanim będą mogły zostać przetworzone.

Ale jeśli masz asynchroniczne połączenie podczas oczekiwania, to zwalnia ten wątek, aby przetworzyć więcej żądań.

Powiązane problemy