2014-05-07 76 views
8

我只是好奇爲什麼ASP.net MVC網站模板使用ASP.net身份的異步方法?他們似乎沒有做任何可以從使用異步方法中受益的事情。爲什麼默認的MVC站點使用異步ASP.net身份?

例如,爲什麼要用:

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

相反的:

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

難道他們不是在做同樣的事情?在這兩種情況下,在繼續執行下一行代碼之前,您都在等待IdentityResult,對嗎?

+3

我不確定你看到了這個,但是這個問題是由@StephenCleary回答的http://stackoverflow.com/questions/10960998/how-different-async-programming-is-from-threads。答案很好。 – milagvoniduak

回答

6

正確,您正在等待RemoveLoginAsync返回,然後再執行下一行代碼。但是,這樣做會有好處...

在執行RemoveLoginAsync時,它不會鎖定線程(因爲它是異步的)。舉例來說,舉個例子來說,如果你有4個線程可用於你的應用程序,並且有4個請求進入,所有等待同步調用的請求都會進入隊列,然後它們才能被處理。

但是,如果您在等待時有異步調用,則會釋放該線程以處理更多請求。

相關問題