-1

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

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

有什么办法可以使这项工作?

4

2 回答 2

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。

于 2013-02-02T14:24:01.860 回答
0

为什么不使用任务?它也是异步的(因为我认为这就是您要寻找的东西。

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

可以在这里找到区别:

任务和线程有什么区别?

于 2013-02-02T14:15:53.247 回答