Motivation is not productivity. As you mentioned, too many threads can lead to performance degradation (due to context switching, cache extraction, claims, etc.). The idea behind this magic number is to try to avoid deadlocks in user code. A developer can cause a deadlock if he queues many work items in a thread pool, which waits for other items that were also in the queue for the thread pool. If a situation arises when the thread pool uses its maximum number of threads (all of them are in the idle state), then you have a dead end .
Of course, there is nothing special in the number "250", and still there may be deadlocks if the developer insists on using such a problematic pattern of using a thread pool. However, this should reduce the likelihood of a dead end in such scenarios.
Joe Duffy explains this reasoning in more detail in his post: Why the CLR 2.0 SP1 threadpool default max thread count was increased to 250 / CPU .
source share