class Program
{
private int x = 0;
static void Main(string[] args)
{
Program p = new Program();
int a, b;
ThreadPool.GetMaxThreads(out a, out b);
Console.WriteLine("{0} - {1}", a, b);
for (int y = 0; y < 20; y++)
{
WaitCallback cb = new WaitCallback(DoSomething);
ThreadPool.QueueUserWorkItem(cb, y);
}
}
public static void DoSomething(object state)
{
Console.WriteLine(state);
}
}
大部分时间它打印出20个项目。但是,有时它只打印一些。这是为什么?我来自Java背景,我想知道我是否对.NET ThreadPools如何工作做出了一些错误的假设。
答案 0 :(得分:7)
ThreadPool没问题,它不会丢弃任何东西。
在输出完成之前,您的程序很可能会关闭 ThreadPool使用后台线程,并在进程退出时简单地中止它们。
所以添加等待的东西,比如Main的末尾的Console.ReadLine()
,看看会发生什么。
答案 1 :(得分:0)
在所有线程完成各自的任务之前,没有什么可以阻止程序继续。循环之后,您将要阻止主线程,直到所有回调都被触发。