进程列出不同线程中的项目

时间:2010-03-02 15:01:04

标签: c# multithreading

目前我有排队等待处理的Job对象列表,如下所示。

   List<Job> jobList = jobQueue.GetJobsWithStatus(Status.New);
   foreach (Job job in jobList)
   {               
        job.Process();
   }

我有兴趣在有限数量的线程中同时运行多个Jobs(比如5个线程)。

在c#中执行此操作的最佳方法是什么?

附加说明:

  • 作业对象不共享资源 与其他工作。
  • 每个工作大约需要10秒钟 过程
  • 每个工作都可以连接到 不同的资源。

更新:我使用了信号量,因为我无法使用ThreadPool限制活动线程的数量。

5 个答案:

答案 0 :(得分:5)

如果您有冒险精神,可以使用C#4.0和任务并行库:

Parallel.ForEach(jobList, curJob => {
  curJob.Process()
});

答案 1 :(得分:3)

您需要查看线程池(简单的答案)。在C#中甚至还有一个ThreadPool类,在msdn library中设置好的例子非常容易。

答案 2 :(得分:1)

ThreadPool.QueueUserWorkItem()

这将为执行方法排队。它将在线程池线程可用时执行。

答案 3 :(得分:0)

如果您打算使用线程,简单编码:

private static void TransferThread(ThreadStart tstart)
        {
            Thread thread = new Thread(tstart);
            thread.IsBackground = true;
            thread.Start();
}

或者你可以ThreadPool。这允许您使用任何可用的线程,并在完成后将其返回池中。

答案 4 :(得分:0)

我会试试.NET ThreadPool。