C#-需要帮助了解.net ThreadPool

我试图了解ThreadPool的功能,我有一个.NET示例:

class Program
{
    static void Main()
    {
        int c = 2;

        // Use AutoResetEvent for thread management

        AutoResetEvent[] arr = new AutoResetEvent[50];

        for (int i = 0; i < arr.Length; ++i)
        {
            arr[i] = new AutoResetEvent(false);
        }

        // Set the number of minimum threads
        ThreadPool.SetMinThreads(c, 4);

        // Enqueue 50 work items that run the code in this delegate function
        for (int i = 0; i < arr.Length; i++)
        {
            ThreadPool.QueueUserWorkItem(delegate(object o)
            {
                Thread.Sleep(100);
                arr[(int)o].Set(); // Signals completion

            }, i);
        }

        // Wait for all tasks to complete
        WaitHandle.WaitAll(arr);
    }
}

是否以2(int c)为一组运行50个“任务”,直到全部完成?或者我不了解它的真正作用.

解决方法:

通过设置最小线程数,您要求.NET运行时唯一要做的就是为线程池分配至少2个线程.您并不是在要求它将自身限制为2.

因此,不能保证您的程序将为此特别使用多少个线程.这取决于您的系统和许多其他因素.

我做了一个简单的测试(对程序进行了微小的更改,以跟踪进入睡眠调用的并发线程)在一次运行中达到4,在另一次运行中为3,在另一次运行中为7,在另一次运行中为10,等等.

您确实不需要更改线程池大小.

你想达到什么目的?

上一篇:java-如何检查池“重用”线程


下一篇:java-等待所有任务完成