目前我有排队等待处理的Job对象列表,如下所示。
List<Job> jobList = jobQueue.GetJobsWithStatus(Status.New);
foreach (Job job in jobList)
{
job.Process();
}
我有兴趣在有限数量的线程中同时运行多个Jobs(比如5个线程)。
在c#中执行此操作的最佳方法是什么?
附加说明:
更新:我使用了信号量,因为我无法使用ThreadPool限制活动线程的数量。
答案 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。