Limits on ThreadPool.SetMinThreads and SetMaxThreads

By FoxLearn 1/14/2025 7:31:26 AM   22
In an ASP.NET Core project, managing worker threads for task execution is crucial for optimizing performance, especially when dealing with a high volume of incoming HTTP requests.

Imagine you're working on an ASP.NET Core application where you manage a pool of worker threads to process tasks. You might want to configure the minimum and maximum number of threads to optimize how requests are handled.

For example:

ThreadPool.SetMinThreads(workerThreads: 4, completionPortThreads: 4);
ThreadPool.SetMaxThreads(workerThreads: 70, completionPortThreads: 70);

This configuration sets the minimum number of worker threads to 4 and the maximum number of worker threads to 70, along with corresponding completion port threads.

Are There Limitations on the Values You Can Set?

Yes, there are several limitations to be aware of when setting the minimum and maximum thread pool sizes in .NET Core.

The thread pool creates and manages worker and I/O completion threads as needed, aiming to optimize throughput by balancing the number of tasks completed over time. It can scale the number of threads up to a specified minimum, but when demand is low, the thread pool may use fewer threads than the minimum.

If you set a negative number or a value exceeding the maximum allowed thread pool threads (obtained with GetMaxThreads), SetMinThreads will return false and not update the minimum values. The thread pool has upper limits (e.g., short.MaxValue), and the specified values are capped to these limits, meaning the actual thread count may be lower than requested even if the method succeeds.