2010-03-02 5 views
1

현재 작업 목록 개체는 순차적으로 처리되도록 대기열에 있습니다.다른 스레드의 목록 항목 처리

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

제한된 수의 스레드에서 여러 작업을 동시에 실행하는 데 관심이 있습니다 (예 : 5 스레드).

C#에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

추가 정보 :

  • 작업 개체가 다른 작업과 자원을 를 공유하지 않습니다.
  • 각 작업은 프로세스까지 약 10 초가 걸립니다.
  • 각 작업은 서로 다른 리소스 에 연결할 수 있습니다.

업데이트 : 스레드 풀과 활성 스레드의 양을 제한 할 수 없기 때문에 나는 세마포어를 사용했다.

답변

5

당신이 모험을 좋아한다면 당신은 C# 4.0 및 작업 병렬 라이브러리 사용할 수 있습니다

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

매우 흥미로운 Sid, 현재 Visual Studio 2008 with .NET 3.5를 사용하고 있습니다. 슬프게도, 골드가 될 때까지 라이브 서버에서 4.0을 사용할 수 있다고는 생각하지 않습니다. –

+0

이해하기 쉽습니다. 여전히 .NET 2.0을 사용하여 붙어 있습니다. ( –

3

스레드 풀을 살펴 보는 것이 좋습니다 (간단한 대답). C#에는 ThreadPool 클래스가 있으며 msdn library에 훌륭한 예제를 설정하는 것은 매우 쉽습니다. 당신이 스레딩, 간단한 코딩을 사용하는 것을 의미하는 경우

0

:

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

또는 당신 ThreadPool 수 있습니다. 이렇게하면 사용 가능한 모든 스레드를 사용하고 완료 한 후에 다시 풀로 되돌릴 수 있습니다.

1

ThreadPool.QueueUserWorkItem()이 실행하는 방법을 큐에

합니다. 스레드 풀 스레드가 사용 가능할 때 실행됩니다.

0

.NET ThreadPool을 사용해 볼 수 있습니다.

관련 문제