我的应用程序有两个主要任务:编码,处理视频。 这些任务是独立的。 我想用可配置的线程数运行每个任务。 出于这个原因,我通常使用ThreadPool和SetMaxThreads。但是现在我有两个任务,并希望“每个任务有两个可配置的(线程数)threapool”。 好吧,ThreadPool是一个静态类。那么我该如何实现我的策略(每个任务的易配置线程数)。
由于
答案 0 :(得分:5)
您可能需要自己的线程池。如果您使用的是.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
。我发布了最少量的代码来获得原始线程池。当然,您可能希望调整和扩展此实现以满足您的特定需求。