一种类型的多个线程,一个函数

本文关键字:线程 一个 函数 一种 类型 | 更新日期: 2023-09-27 17:57:02

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

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

有什么办法可以做到这一点吗?

一种类型的多个线程,一个函数

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

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

区别可以在这里找到:

任务和线程有什么区别?

我认为您拥有的东西没有任何问题(也许如果您在myFunction中共享一些代码,我们可以得到更好的图片)。

我建议您使用 ThreadPool,或者使用任务并行库,而不是手动创建自己的线程。

以下是一些技巧:

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。