如果我上不需要響應一個線程,不適宜繼續執行依賴於I/O密集型調用的結果(HttpClient的請求) ,在.NET中異步實現調用有什麼價值嗎?調度O綁定操作在.NET
將在Windows知道我在等待一個I/O操作和數據,直到到達調度線程不要?
我記得讀書的地方,這樣做,但我恐怕還是很難理解它是如何工作,當我可以依靠它。
如果我上不需要響應一個線程,不適宜繼續執行依賴於I/O密集型調用的結果(HttpClient的請求) ,在.NET中異步實現調用有什麼價值嗎?調度O綁定操作在.NET
將在Windows知道我在等待一個I/O操作和數據,直到到達調度線程不要?
我記得讀書的地方,這樣做,但我恐怕還是很難理解它是如何工作,當我可以依靠它。
不,在那裏使用異步沒有價值。正如你懷疑的那樣,Windows會知道線程正在等待IO,並且不會調度線程直到數據到達。
但是,異步的想法是,你並不需要創建一個新的線程。異步的想法是(我在這裏削減了幾個角落;互聯網上有更好的文檔),它試圖做一些像你在這裏手動做的事情。所以,而不是你必須創建一個新的線程,異步爲你做這個。 (實際上它並不創建一個新的線程,但你的想法。)
如果這需要很高的性能,我不會建議這樣做你現在正在實施的方式。異步會更好。在你的情況下,當你做1000個請求時,你將有1000個線程,這不是一個好主意。異步會更聰明地實現這一點,並會給你更好的表現。
使用異步(除了性能)的基本優點是,它就像你實際上在UI線程編程只。以前,這將會鎖定您的應用程序,但通過異步,您的應用程序可以保持響應。這是異步的主要優勢。
在這種情況下,我不是手動清理線程,它來自IIS或我們在IIS之上使用的框架。所以我認爲這不會成爲問題。 – Sprague
比你可能沒事。此外,異步可能不會工作(至少不是您期望的),因爲它對Windows/WPF/Metro應用程序意味着更多。 –
注:我想可能的不利可能是東西就像檢查彙總例外,任務的開銷等 – Sprague
我選擇一個答案,但我仍想知道是否有人能簡要介紹一下如何OS和CLI一起工作,以避免調度等待I/O的線程,並且會提出一個評論,可以肯定地確認它的細節。 – Sprague