Свободные потоки - это концепция, которая существует только в пуле потоков .Net. Возможно, вы имели в виду свободные ресурсы процессора!?
Если вы объявляете свои собственные потоки с новым потоком (), вы не связаны этим.
Однако порождение многих из них может замедлить процесс и даже ОС.
Вот почему вы должны сделать свой собственный менеджер потоков, чтобы справиться с этим.
Вы можете проверить использование процессора следующим образом:
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
double cpuUsage = Convert.ToDouble(cpuCounter.NextValue());
А затем в вашем коде используйте переменную для:
int threadId;
if (cpuUsage > threshold) {
DoWork();
}
else {
threadId = YourThreadManager.Queue(DoWork);
}