首先我很抱歉,如果有另一个这样的线程,我没有看到它!我的问题是:我想创建多个线程。但是这些线程必须执行相同的功能。我怎样才能做到这一点?像这样:
for(int i=0;i<20;i++)
{
Thread t = new Thread(myFunction);
t.Start();
}
有什么办法可以使这项工作?
首先我很抱歉,如果有另一个这样的线程,我没有看到它!我的问题是:我想创建多个线程。但是这些线程必须执行相同的功能。我怎样才能做到这一点?像这样:
for(int i=0;i<20;i++)
{
Thread t = new Thread(myFunction);
t.Start();
}
有什么办法可以使这项工作?
我看不出你所拥有的有什么问题(也许如果你在 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。
为什么不使用任务?它也是异步的(因为我认为这就是您要寻找的东西。
for(int i=0;i<20;i++)
{
Task task = new Task(new Action(myFunction));
task.Start();
}
可以在这里找到区别: