簡體   English   中英

為什么異步代碼處理較少的負載?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM