簡體   English   中英

等待所有線程完成處理每個WebRequest

[英]Wait Till All Thread Finish Processing Each WebRequest

我正在用C#.Net4.0構建一個線程程序,我遇到了一些問題。

我正在使用線程池和回調。 下面是我在Main()中的代碼。

string[] urls = { url1, url2, url3, url4 };
callBack = new WaitCallback(PooledFunc);
for (int i = 0; i < urls.Length; i++)
    ThreadPool.QueueUserWorkItem(callBack, urls[i]);

我還有一個功能,將從網址獲得響應

static void PooledFunc(object url)
{
    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;

    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream Answer = response.GetResponseStream();

    // Display the status.
    Console.WriteLine(response.Headers);
    StreamReader _Answer = new StreamReader(Answer);

    string content = _Answer.ReadToEnd();
    Console.WriteLine(content);
}

我在那里放了一些測試打印,並且使用上面的代碼,程序看起來像是啟動所有線程但在所有線程都通過之前終止,並且每次都是不同的。

當我把Console.ReadLine(); 在for循環之后,它看起來好像等待所有線程完成。

問題:有沒有辦法可以等到所有線程都完成后再繼續下一步而不使用Console.ReadLine();

您可以使用Parallel.ForEach來完成同樣的事情,而不是使用ThreadPool.QueueUserWorkItem

string[] urls = { url1, url2, url3, url4 };
Parallel.ForEach(urls, url => PooledFunc(url));

在處理完所有項目之前, Parallel.ForEach不會返回。

這也允許你保持PooledFunc聲明更好:

static void PooledFunc(string url) // Can keep this strongly typed
{
    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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