2013-12-21 174 views
3

我想了解MVC5的細節,並且遇到了讓我感到困惑的東西。在與個人身份驗證的MVC5項目自帶默認的AccountController有這行代碼在異步登錄和註冊方法瞭解異步並等待

var result = await UserManager.CreateAsync(user, model.Password); 

我讀到這裏http://msdn.microsoft.com/en-us/library/hh191443.aspx這是一個正常的做法,但我不明白爲什麼你會使用異步方法並在同一行中等待。使用在這裏採用相同參數的.Create方法不是更有意義嗎?

+0

http://stackoverflow.com/questions/4057359/new-c-sharp-await-feature – maxbeaudoin

+0

http://stackoverflow.com/questions/4054263/how-does-c-sharp-5-0s-async -await-feature-different-from-the-tpl?rq = 1 – maxbeaudoin

+0

我從第二篇文章中得出的結論是,它會啓動一個新線程來執行.CreateAsync,而不是使用當前的線程。是嗎?那有沒有什麼實際價值? – esastincy

回答

2

SomeMethod()await SomeMethodAsync()之間的區別在於後者在該方法執行IO時不會阻塞線程。因此,應用程序變得更具可擴展性,因爲它可以使用較少數量的線程來提供相同數量的請求。

如果您不關心可擴展性,那麼選擇哪個選項並不重要。但是,使用異步版本可能會更好,以便面向未來的應用程序,以便在可伸縮性成爲問題時,您的應用程序運行良好。

+0

這隻適用於存在同步上下文,右? –

+1

@PauloMorgado'async'''await'也可以在沒有同步的情況下工作。在這種情況下,繼續在線程池上繼續。 – svick