考慮一個簡單的僞代碼爲什麼在asp.net身份API中所有的數據庫訪問方法標記異步
User logs in
Application access database to try retrieve the login using provided password and username
if record is found then show requested page otherwise display login with error message
這是如何受益於異步?只有在數據庫搜索到記錄後,應用程序才能繼續。
爲了清楚起見,在上面說的是否有意義,在上面,db查找和後續顯示部分(在web/asp.net應用程序的上下文中)的實際「進程」仍然是「同步的」 (它是自己的「線程」)?我(我想)我明白了 - 當運行類似控制檯應用程序的東西時,「其他進程」不會被阻塞(例如控制檯更新),但是在ASP.Net中在概念上掙扎。謝謝.. – EdSF
不完全。與您的控制檯應用程序類比類似,其他請求(來自其他客戶端或同一客戶端)不會因爲等待請求線程變爲空閒而開始處理而被阻止。 –
那麼它如何「知道」/「跟蹤」哪個(UI/HTTP)線程「回來」(db結果之後)呢? [來自Hanselman](http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx):'Web應用程序中的異步事件本身就是奇怪的怪物。異步無效是爲了火災而忘記編程模型。這適用於Windows UI應用程序,因爲應用程序會一直存在,直到操作系統終止它爲止。確保它是一個可以與之交互的UI線程。在Web應用程序中,由於請求的定義是暫時的,因此此模型分崩離析。# – EdSF