ThreadPool问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 07:43:38
using System;
using System.Threading;

public class SimplePool
{
public static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
ThreadPool.QueueUserWorkItem(new WaitCallback(t1), i.ToString());
//ThreadPool.QueueUserWorkItem(new WaitCallback(t2));
//为什么这一句会有错误:“t2”的重载均与委托“System.Threading.WaitCallback”不匹配?
Console.ReadKey();
}
static public void t1(object name)
{
Random rnd = new Random();
Thread.CurrentThread.Name = (string)name;
while (true)
{
Console.Write(Thread.CurrentThread.Name + " ");
Thread.Sleep(rnd.Next(5000));
}
}
static public void t2()
{
Random rnd = new Random();
Thread.CurrentThread.Name = rnd.Next(1000).ToString();
while (true)
{

1、请参见 WaitCallback 委托的声明:
public delegate void WaitCallback(object state);
由此可见,需要一个无返回值的,并且有一个object型参数的方法才可以匹配。

问题中的t1满足,t2没有参数,所以不满足。

2、ThreadPool有一个默认的上限和下限,即线程池中同时存在的最大的线程数和默认的保留线程数。
好像.net默认上限是25
可以通过 ThreadPool.GetMaxThreads方法 来获取线程池的当前上限和下限值。
通过ThreadPool.SetMaxThreads方法来设置线程池的当前上限和下限值。