为每个任务分开threadPool

And*_*kov 2 c# multithreading threadpool

我有应用程序有两个主要任务:编码,处理视频.这些任务是独立的.我想用可配置的线程数运行每个任务.出于这个原因,我通常使用ThreadPool和SetMaxThreads.但是现在我有两个任务,并希望"每个任务有两个可配置的(线程数)threapool".好吧,ThreadPool是一个静态类.那么我该如何实现我的策略(每个任务的易配置线程数).

谢谢

Bri*_*eon 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是它的全部内容.您将为CustomThreadPool要控制的每个实际池创建一个.我发布了最少量的代码来获得原始线程池.当然,您可能希望调整并扩展此实现以满足您的特定需求.