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: 'ProcessRequest'に渡す前に 'state'を' Request'にキャストする必要があるかもしれません。もちろん、これがOPが使用する予想されるパラメータタイプであると仮定します。ちょうどニックピッキング;-) –
@ Christian.K - あなたは正しいです、答えを更新しました。乾杯! –
私の答えに何が間違っているかを説明することができますか? –