如何以类似于for循环的方式启动10个线程来执行一个处理密集型方法,代码示例将非常有帮助。
for (int i = 0; i<=10; i++) //10 threads are intended.
{
LongRunningMethod();
}
如何以类似于for循环的方式启动10个线程来执行一个处理密集型方法,代码示例将非常有帮助。
for (int i = 0; i<=10; i++) //10 threads are intended.
{
LongRunningMethod();
}
ThreadPool.QueueUserWorkItem
如果您不想使用线程池,可以创建并启动一个新线程。
new Thread( delegate() { LongRunningMethod(); } ).Start();
正如其他答案中所提到的,您可以使用ThreadPool.QueueUserWorkItem将作业调度到线程池中的一个线程上或创建一个新的显式Thread实例来处理该工作。有关创建线程的各种方法的详细信息,请参阅MSDN线程教程。
您选择使用哪种方法可能会对您的应用程序和CLR的性能和行为产生一定的影响。有关更多详细信息,请阅读C#中何时使用线程池。
Action newThread = new Action(LongRunningMethod);
// Call Async which is a new thread
newThread.BeginInvoke(null, null);
没有模板的Action只存在于.NET 3.5中,对于.NET 2.0,您必须声明一个委托。
public delegate void NoParametersMethod();
NoParametersMethodnewThread = new NoParametersMethod(LongRunningMethod);
// Call Async which is a new thread
newThread.BeginInvoke(null, null);
LongRunningMethod()
是否适合线程池。如果适合,则使用线程池是最佳选择(开销低,具有一些基本的负载平衡)。ThreadStart starter = new ThreadStart(LongRun);
for (int i = 1; i <= 10; i++) // 10 threads are intended, note the i=1
{
Thread t = new Thread(starter);
t.Start();
}
注意1:还存在一个ParameterizedThreadStart类。
注意2:您不能将其扩展到i < 100或其他值,您需要限制最大线程数。线程池已经做到了。
来自MSDN:
有几种情况下,创建和管理自己的线程而不是使用线程池线程是合适的:
像这样简单的东西...
var threads = new List<Thread>();
var numThreads = 10;
for( int i = 0; i < numThreads; i++ )
{
threads.Add( new Thread( () => DoWork() ) );
threads[i].Name = i.ToString();
threads[i].Start();
}