2015-05-01 85 views
2

當異步/等待發出http請求時(例如使用HttpClient),默認情況下是否有內置的限制?異步/等待併發http請求的最大數量

this這樣的問題意味着無限數量的連接將被打開。我的應用程序在循環中執行一批h​​ttp請求,似乎在大約50個TCP連接上保持不變。

我最初擔心我需要爲節流添加SemaphoreSlim,但.NET似乎爲我做了這個。 任何人都可以對此有所瞭解嗎?

+0

每個服務器有2個連接的限制。你是否連接到相同的服務器? – i3arnon

+0

是的,在這種情況下,我在批量加載場景中反覆擊中同一個端點。我知道Web瀏覽器傳統上有這2個連接限制,但.NET也強制執行它?這是如何運作的? –

+1

[是](http://stackoverflow.com/q/10403944/885318)。 – i3arnon

回答

4

.Net框架中的連接存在限制。例如,這個ServicePointManagerDefaultConnectionLimit這允許你限制併發操作。

但是,我不建議將它用於節流。如果你需要控制你的請求,你應該使用SemaphoreSlim,特別是WaitAsync,因爲你在async-await環境中,並且這些請求是IO綁定(並且長)。

使用SemaphoreSlim.WaitAsync意味着您不會阻塞,並且您異步等待,對於任何其他非限制機制而言都不是這種情況。此外,您不希望在能夠完成操作之前開始操作。