线程池参数

时间:2011-08-28 23:41:27

标签: c# multithreading threadpool

我一直在各处搜索,我需要一个解决方案,让我可以添加200-300个具有某些功能的ACCEPTS参数作业。我知道委托和对象是单个参数,但是我希望能够将每个任务用不同的paramentars排队,而不是仅使用对象参数。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

您可以这样做:

void MyMethod(int param)
{
    ....
}

...

ThreadPool.QueueUserWorkItem(_ => MyMethod(1));
ThreadPool.QueueUserWorkItem(_ => MyMethod(2));
ThreadPool.QueueUserWorkItem(_ => MyMethod(3));
...
ThreadPool.QueueUserWorkItem(_ => MyMethod(42));

另一种选择是让MyMethod接受Object类型的参数,并使用QueueUserWorkItem的第二次重载:

void MyMethod(object param)
{
    int value = (int)param;
    ....
}

...

ThreadPool.QueueUserWorkItem(MyMethod, 1);
ThreadPool.QueueUserWorkItem(MyMethod, 2);
ThreadPool.QueueUserWorkItem(MyMethod, 3);
...
ThreadPool.QueueUserWorkItem(MyMethod, 42);

答案 1 :(得分:1)

简单样本:

        for (int i = 0; i < 100; i++)
        {
            System.Threading.ThreadPool.QueueUserWorkItem(k =>
            {
                TestMethod(k);
            }, i);
        }

答案 2 :(得分:0)

没有任何东西阻止您将对象列表作为对象参数发送,因此实际上您可以将任意数量的参数传递给线程函数。

答案 3 :(得分:0)

您正在寻找一个参数化的线程开始(下面的示例)

string myUrl = 'asd'
Thread t = new Thread (new ParameterizedThreadStart(FetchUrl));
t.Start (myUrl);


static void FetchUrl(object url)
{
    // use url here, probably casting it to a known type before use
}

或者您可以使用System.Threading.Tasks中找到的任务..

Task.Factory.StartNew(() => {
                    File.WriteAllBytes(path, response);
                });