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 ThreadPools の仕組みについて間違った思い込みをしているのではないかと思っています。

4

2 に答える 2

7

ThreadPool は問題ありません。何もドロップしません。

ほとんどの場合、出力が完了する前にプログラムが閉じます。
ThreadPool はバックグラウンド スレッドを使用し、プロセスが終了すると単純に中止されます。

Console.ReadLine()そのため、 Main の最後にa などの待機するものを追加して、何が起こるかを確認してください。

于 2012-05-04T13:57:07.823 に答える
0

すべてのスレッドがそれぞれのタスクを完了する前に、プログラムの続行を妨げるものは何もありません。ループの後、すべてのコールバックが起動されるまでメイン スレッドをブロックする必要があります。

于 2012-05-04T14:11:28.487 に答える