ThreadPool有两个设置线程池并发数量的方法,分别是:
ThreadPool.SetMinThreads(int workerThreads, int completionPortThreads)//设置最小线程并发数
ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)//设置最大线程并发数
参数解释:
workerThreads 要由线程池根据需要创建的新的最小工作程序线程数。
completionPortThreads 要由线程池根据需要创建的新的最小空闲异步 I/O 线程数。
使用这两个方法可以控制线程池ThreadPool运行过程中的并发数量,他的效果怎么样呢,我们写段代码来测试一下:
public static void ThreadUseAndConstruction()
{
ThreadPool.SetMinThreads(5, 5); // 设置线程池最小线程数量为5
ThreadPool.SetMaxThreads(15, 15); // 设置线程池最大线程数量为15
Stopwatch watch = new Stopwatch();
watch.Start();
WaitCallback callback = index =>
{
Console.WriteLine(String.Format("{0}: Task {1} started", watch.Elapsed, index));
Thread.Sleep(10000);
Console.WriteLine(String.Format("{0}: Task {1} finished", watch.Elapsed, index));
};
for (int i = 0; i < 20; i++)
{
ThreadPool.QueueUserWorkItem(callback, i);
}
}
这段代码部分执行结果如下
00:00:00.0707416: Task 2 started
00:00:00.0706114: Task 0 started
00:00:00.0708271: Task 1 started
00:00:00.0708882: Task 3 started
00:00:00.0709376: Task 4 started
00:00:01.0110528: Task 5 started
00:00:01.5121437: Task 6 started
00:00:02.0163181: Task 7 started