我有一個我想要使用HttpClient
併發下載的頁面的URL列表。 URL列表可能很大(100以上!)使用Rx和SelectMany限制併發請求
目前我已經有這樣的代碼:
var urls = new List<string>
{
@"http:\\www.amazon.com",
@"http:\\www.bing.com",
@"http:\\www.facebook.com",
@"http:\\www.twitter.com",
@"http:\\www.google.com"
};
var client = new HttpClient();
var contents = urls
.ToObservable()
.SelectMany(uri => client.GetStringAsync(new Uri(uri, UriKind.Absolute)));
contents.Subscribe(Console.WriteLine);
問題:由於SelectMany
使用,任務的一大束創建幾乎在同一時間。看來,如果URL的列表足夠大,很多任務會給超時(我得到「任務被取消」例外)。
所以,我認爲應該有一種方法,可能使用某種調度程序來限制併發任務的數量,在給定時間不允許超過5或6個任務。
通過這種方式,我可以獲得併發下載,而無需啓動太多可能會失速的任務,就像他們現在所做的那樣。
如何做到這一點,所以我不飽和大量的超時任務?
非常感謝。
你可能要考慮使用[數據流](https://msdn.microsoft.com/en-us/library/hh228603%28v= vs.110%29.aspx)API。 –
你可以使用我的代碼來整合它嗎?我忽略瞭如何使用DataFlow來完成它。 TBH,我從來沒有用過,但看一些樣品會有很大的幫助。 – SuperJMN