一种类型的多个线程,一个函数
本文关键字:线程 一个 函数 一种 类型 | 更新日期: 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。