gpt4 book ai didi

c# - 将参数传递给 QueueUserWorkItem

转载 作者:行者123 更新时间:2023-11-30 22:31:07 25 4
gpt4 key购买 nike

我正在尝试使用下面的代码来触发多个线程来使用 HttpWebRequest。我在所有可能的请求中做了一个foreach(每个请求都有不同的数据),但是当我将请求传递给消费方法时,它似乎总是只接收列表中的最后一项。

有人可以帮我解决这个错误吗?

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(); //

最佳答案

为什么不将请求作为状态对象传递给线程?只需将每个请求作为第二个参数传递给 ThreadPool.QueueUserWorkItem。这是将数据传递给线程的首选方式。

foreach (Request request in requests)
{
ThreadPool.QueueUserWorkItem(
state =>
{
try
{
ProcessRequest(state as Request);
}
finally
{
if (Interlocked.Decrement(ref pending) == 0)
{
finished.Set(); // Signal completion of all work items.
}
}
}, request);
}

关于c# - 将参数传递给 QueueUserWorkItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com