Возможно, вам понадобится собственный пул потоков. Если вы используете .NET 4.0, то на самом деле довольно легко свернуть свой собственный, если вы используете класс BlockingCollection
.
public class CustomThreadPool
{
private BlockingCollection<Action> m_WorkItems = new BlockingCollection<Action>();
public CustomThreadPool(int numberOfThreads)
{
for (int i = 0; i < numberOfThreads; i++)
{
var thread = new Thread(
() =>
{
while (true)
{
Action action = m_WorkItems.Take();
action();
}
});
thread.IsBackground = true;
thread.Start();
}
}
public void QueueUserWorkItem(Action action)
{
m_WorkItems.Add(action);
}
}
Это действительно все, что нужно. Вы должны создать CustomThreadPool
для каждого фактического пула, которым хотите управлять. Я разместил минимальный объем кода, чтобы запустить пул сырых потоков. Естественно, вы можете настроить и расширить эту реализацию в соответствии с вашими потребностями.