在我的應用程序中,我有一個文本區域,用戶可以在其中輸入多個網址(通常爲1000左右)。正確的方法來觸發多個HttpWebRequest,可能需要很長時間
每個網址,我火了一個http請求是這樣的:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
問題: 常常URL服務器處於脫機狀態,這意味着request.GetResponse()
將掛起request.Timeout
毫秒。 我需要系統不忍受等待超時;相反,我想利用空閒時間來激發剩餘的請求,同時某個請求正在等待響應。
我的解決方案 我雖然對調度每個請求在不同的任務 我的解決方案,因此,看起來是這樣的:
Task[] tasks = new Task[numberOfUrls];
for (int i = 0; i < numberOfUrls; ++i)
{
int index = i;
tasks[index] = Task.Factory.StartNew(() => Request(urls[index]));
}
Task.WaitAll(tasks);
問:什麼是做解決這個問題的正確方法?
我不知道我的方法是正確的方式,因爲閱讀了大量的材料對整個C#異步/多線程/並行機制(這我不是很熟悉了)後,我真的很困惑。 在這一點上,我不確定我是這樣做異步或多線程或任何。 我看到了一些建議,我應該讓這種方法觸發請求async,他們稱之爲等待。但後來我也發現有人說它不會利用並行性等等。
我預計人們會基於這標誌着作爲的意見,但我希望你想象的更難,因爲它確實不是:它是關於正確使用基於它是如何工作的,並應該使用的框架。