一种类型的多个线程,一个功能

时间:2013-02-02 14:11:23

标签: c# multithreading function for-loop

首先我很抱歉,如果有另一个这样的线程,我没有看到它! 我的问题是:我想创建多个线程。但是这些线程必须执行相同的功能。 我怎么能做到这一点? 像这样:

for(int i=0;i<20;i++)
{
  Thread t = new Thread(myFunction);
  t.Start();
}

有没有办法让这项工作?

2 个答案:

答案 0 :(得分:0)

为什么不使用任务?它也是Async(因为我认为这就是你想要的。

for(int i=0;i<20;i++)
{
  Task task = new Task(new Action(myFunction));
  task.Start();
}

差异可以在这里找到:

What is the difference between task and thread?

答案 1 :(得分:0)

我没有看到你所拥有的任何错误(也许如果你在myFunction中分享一些代码,我们可以得到更好的图片)。

我建议您使用ThreadPool,或者使用Task Parallel库而不是手动创建自己的线程。

以下是一些技巧:

System.Threading.Tasks.Parallel.For(0, 20, myFunction); // myFunction should accept an int, and return void)

如果myFunction的签名不同,你可以使用lambda来“翻译” - 请注意你在这里调用一个调用函数的函数:

Parallel.For(0, 20, i => myFunction()); //(I could pass any param to my function in this example)

这是一个线程池方式

System.Threading.Threadpool.QueueUserWorkItem(myFunction) // myFunction needs to accept an object

//这里是如何使用任何签名将其排队到线程池

ThreadPool.QueueUserWorkItem(s => myFunction());

已经提到的另一张海报使用了任务来完成它。如果你正在做的事情很简单,我会使用Parallel.For。