2010-03-02 5 views
1

На данный момент у меня есть список объектов Job, которые помещаются в очередь для последующей обработки последовательно в приведенном ниже коде.список процессов в разных тонах

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

Я заинтересован в запуске нескольких Рабочих мест одновременно в ограниченном количестве потоков (скажем, 5 потоков).

Каков наилучший способ сделать это в C#?

Дополнительные примечания:

  • объект А Работа не совместно использовать ресурсы с другими заданиями.
  • Каждая работа занимает около 10 секунд до процесса.
  • Каждое задание может подключаться к различным ресурсам.

Обновление: Я использовал семафор, потому что не может ограничить количество активных потоков с ThreadPool.

ответ

5

Если вы чувствуете приключений вы можете использовать C# 4.0 и Task Parallel Library:

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

Очень интересно Сид, На данный момент я использую Visual Studio 2008 с .NET 3.5. К сожалению, я не думаю, что смогу использовать 4.0 на живых серверах, пока не станет Gold. –

+0

Понятно, я все еще придерживался .NET 2.0 :( –

3

Вы захотите изучить пулы потоков (для простого ответа). В C# есть даже класс ThreadPool, и его довольно легко настроить с помощью отличных примеров в msdn library.

0

Если вы использовать Threading, простое кодирование:

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

Или вы можете вы ThreadPool. Это позволяет использовать любой доступный поток и возвращать его обратно в пул после того, как вы закончите.

1

ThreadPool.QueueUserWorkItem()

Это в очередь способ исполнения. Он будет выполняться, когда поток потока потока доступен.

0

Я бы дал .NET ThreadPool попробовать.

Смежные вопросы