2
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 线程池的工作方式做出了一些错误的假设。

4

2 回答 2

7

ThreadPool 没问题,它不会丢弃任何东西。

您的程序很可能在输出完成之前关闭。
ThreadPool 使用后台线程,它们在进程退出时简单地中止。

所以添加一些等待的东西,比如Console.ReadLine()在 Main 的末尾,看看会发生什么。

于 2012-05-04T13:57:07.823 回答
0

在所有线程完成各自的任务之前,没有什么可以阻止程序继续运行。在你的循环之后,你会想要阻塞主线程,直到所有的回调都被触发。

于 2012-05-04T14:11:28.487 回答