ThreadPool FCL을 이용하여 멀티스레딩 작업을 할 때, 스레드풀에 맞긴 모든 스레드가 종료될때까지 어떻게 기다려야 하는지 고민해 보았다. 

 우선 CodeProject를 뒤져 ThreadPool 의 멤버 메소드인  GetMaxThreads, GetAvailableThreads 를 이용하는 방법을 찾았다.
cf) Waiting for All Threads in theThread Pool to Finish

하지만 위 방법은 규모가 있는 프로젝트에는 적용할 수 없다. ThreadPool은 정적 클래스이기 때문에 어셈블리 여러곳에서 사용되어질 수 있기 때문이다. 

 그래서 다시 찾아본 방법은 ManualResetEvent 클래스와 WaitHandle 클래스를 이용하는 방법이다. WaitHandle의 정적 메소드인 WaitAll, WaitAny를 사용하였는데, 사용하다 발견한 점은 WaitAll, WaitAny의 매개변수로 넘겨주는 ManualResetEvent 인스턴스의 개수가 64개를 넘으면 NotSupportedException 예외가 발생한다. 
 
 하는 수 없이, ThreadPool에 스레드를 넘길때 63개 이하씩 넘기는 방법으로 사용하였다.

다른 방법이 있나요?? 
Posted by six605
,