2
我試圖使用下面的代碼來觸發多個線程來使用HttpWebRequest
。 我在所有可能的請求中做了foreach
(每個請求都有不同的數據),但是當我將請求傳遞給消費方法時,它似乎只接收列表中的最後一項。將參數傳遞給QueueUserWorkItem
有人可以幫我解決這個錯誤嗎?
int pending = requests.Count;
var finished = new ManualResetEvent(false);
foreach (Request request in requests)
{
// Required to close over the loop variable correctly.
Request capture = request;
ThreadPool.QueueUserWorkItem(
(state) =>
{
try
{
ProcessRequest(capture);
}
finally
{
if (Interlocked.Decrement(ref pending) == 0)
{
finished.Set(); // Signal completion of all work items.
}
}
}, null);
}
finished.WaitOne(); //
+1:在將'state'傳遞給'RequestRequest'之前,可能需要將'state'強制轉換爲'ProcessRequest'。當然,假設這是OP使用的預期參數類型。只是挑剔;-) – 2012-02-22 11:42:04
@ Christian.K - 你是對的,更新了答案。乾杯! – 2012-02-22 11:43:37
可以downvoter解釋我的答案有什麼問題嗎? – 2012-02-22 11:54:06