[英]Why does the Async Code Handle Less Load?
我創建了一個具有兩個控制器的.Net Web Api,它們執行相同的操作(有目的地非常緩慢的網絡調用)。 一種是同步的,一種是異步的。 您可以在這里找到代碼: https : //github.com/jkruer01/SyncVsAsync
這兩個控制器之間的重要區別是使用WebClient的單行代碼:
同步
var content = client.DownloadString(url);
異步
var content = await client.DownloadStringTaskAsync(url);
很基本的東西...
然后,我創建了一個控制台應用程序,向同步或異步控制器同時觸發50個請求。 我期望異步控制器完成更多同時請求,但是我發現完全相反。 同步控制器成功完成了50個中的25個。 異步控制器僅成功完成了50個中的10個。
為什么是這樣? 我認為異步代碼的目的是可以處理更多同時請求。
我很沮喪
問題在於http請求,默認情況下,您有兩個並發調用的限制,這就是為什么它花費更長的時間的原因,請參見以下文檔:
http://msdn.microsoft.com/zh-CN/library/system.net.servicepointmanager.defaultconnectionlimit.aspx https://msdn.microsoft.com/en-us/library/system.net.servicepoint.aspx
而且這也是: 嘗試並行運行多個HTTP請求,但受到Windows(注冊表)的限制
嘗試更改該值:)
我解決了問題。 問題出在我是從Visual Studio運行代碼的事實。 即使我以“發布”模式運行它,它也在做一些改變行為的事情(我不知道是什么)。 我“發布”了代碼,然后將其運行在Visual Studio之外,並且運行的完全符合我的預期。 感謝您的所有幫助和建議!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.