2014-07-06 29 views

回答

6

這是關於async-await的更一般的問題。以這種方式執行的方法不會阻塞正在執行的線程,並且應用程序可用於執行其他工作,而DB正在返回結果。這意味着您的應用程序可以在等待數據庫返回結果時提供其他請求(可能來自其他用戶)。

有很多關於async-await的文章。您可以從這裏開始:http://blogs.msdn.com/b/cdndevs/archive/2013/12/18/c-async-and-await-why-do-we-need-them-part-1.aspx

而且,FYI身份庫具有作爲擴展方法提供的非異步方法。因此,如果您的應用程序不是異步的,則不必在應用程序中一直使用async關鍵字。

0

不知道有問題的API,但可以等待異步方法。等待「其他代碼」繼續執行。在異步方法完成之後,執行會從您等待的地方繼續執行。如果你不等待,它就像同步方法一樣。

2

你是對的,直到數據庫搜索到記錄並找到結果並且請求已經完成處理,才能將響應返回給請求者。

通過使數據訪問異步,將允許請求線程被釋放並返回到線程池以處理其他請求,並且當數據操作稍後完成時,可以從線程池獲取請求線程並繼續請求的其餘部分。

通過這種方式,請求線程在等待數據庫操作時不會被阻止執行其他有用的工作,就像該方法是同步的。

+0

爲了清楚起見,在上面說的是否有意義,在上面,db查找和後續顯示部分(在web/asp.net應用程序的上下文中)的實際「進程」仍然是「同步的」 (它是自己的「線程」)?我(我想)我明白了 - 當運行類似控制檯應用程序的東西時,「其他進程」不會被阻塞(例如控制檯更新),但是在ASP.Net中在概念上掙扎。謝謝.. – EdSF

+0

不完全。與您的控制檯應用程序類比類似,其他請求(來自其他客戶端或同一客戶端)不會因爲等待請求線程變爲空閒而開始處理而被阻止。 –

+0

那麼它如何「知道」/「跟蹤」哪個(UI/HTTP)線程「回來」(db結果之後)呢? [來自Hanselman](http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx):'Web應用程序中的異步事件本身就是奇怪的怪物。異步無效是爲了火災而忘記編程模型。這適用於Windows UI應用程序,因爲應用程序會一直存在,直到操作系統終止它爲止。確保它是一個可以與之交互的UI線程。在Web應用程序中,由於請求的定義是暫時的,因此此模型分崩離析。# – EdSF

相關問題