2011-11-23 3 views
1

내가 .NET 작업 병렬 라이브러리를 사용하는 검사를 오랫동안 Thread.sleep를하기 : 잘 모르겠어요TPL 작업 설정은

static void Main(string[] args) 
{ 
    for(int i = 0; i < 1000; i++) 
    { 
     int n = i; 
     Task.Factory.StartNew(() => TaskTest(n)); 
    } 
} 

static void TaskTest(int i) 
{ 
    // Will sleep for a long time 
    Thread.Sleep(TimeSpan.FromMinutes(i)); 
    // Do something here 
} 

한 가지 : 때 Thread.sleep를 위의 코드에서 실행, 어떻게 될 것인가? ThreadPool의 스레드를 차지하지 않는다는 것을 알고 있습니다. Thread.Sleep에 여러 작업을 설정하면 24 시간과 같이 매우 오랜 시간 동안 어떤 단점이 있습니까?

답변

2

이것은 ThreadPool의 스레드를 차지합니다. 코드를 실행하면 전체 스레드 풀이 대기중인 작업으로 가득 차 있다는 것을 알 수 있습니다. 사용

 List<Task> tasks = new List<Task>(); 

     for (int i = 0; i < 1000; i++) 
     { 
      int n = i; 
      tasks.Add(Task.Factory.StartNew(() => TaskTest(n))); 
     } 

     Task.WaitAll(tasks.ToArray()); 

ParallelExtensionsExtras 프로젝트는 작업을 예약 할 수있는 TaskFactory이 StartNewDelayed 전화에 대한 확장 메서드가 포함되어 있습니다. 참조 : http://geekswithblogs.net/JoshReuben/archive/2010/11/14/parallel-extensions-extras.aspx

+0

코드를 실행하려고했지만 대기중인 작업을 찾지 못했습니다. 내 컴퓨터에서 잘 실행되고 있습니다. – superche