윈도우즈 서비스에서 타이머를 돌려 문서 목록을 가져와 Console 프로그램(프로세스)을 실행시켜 작업을 처리하려고 합니다. 1. 프로세스를 계속 생성할 수 없으므로 지정한 갯수만큼만 생성하고, 2. 프로세스가 작업을 완료하면 문서 목록에서 문서를 삭제합니다. 이를 바탕으로 그려본 흐름도입니다. DB에서 FinalPDF를 생성할 문서 정보를 가져옴 프로세스 수가 지정된 갯수보다 작다 FinalPDF를 생성할 문서가 있을 때까지 실행중인 프로세스를 구함 프로세스 시작 END N Y 위 흐름도에서 예외 사항을 고려해보면, 오래 걸리는 작업일 경우 작업 처리 중에 타이머 시간이 돌아오면 동일한 작업을 수행하는 프로세스를 다시 실행하게 됩니다. 이런 경우를 대비하기 위해 프로세스를 실행할 때 작업 문서에 프로세스 ID를 저장합니다. 이렇게 하면 중복 작업을 막을 수 있습니다. 타이머 시간이 되면 프로세스 ID를 가진 문서는 실제 프로세스가 돌아가는지 확인하여 프로세스가 돌아가지 않는다면, 작업이 완료된 경우 : 문서 목록에서 해당 문서를 제거합니다. 작업이 완료되지 못한 경우 : 프로세스를 다시 실행시킵니다. 아래는 개선한 흐름도와 의사(PSEUDO) 코드입니다. DB에서 FinalPDF를 생성할 문서 정보를 가져옴 프로세스 수가 지정된 갯수보다 작다 FinalPDF를 생성할 문서가 있을 때까지 실행중인 프로세스를 구함 해당 문서의 프로세스가 실행 중? 프로세스 시작 END N Y N var process = Process.Start(startInfo); /// process.Id를 저장 ... private void _Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { var clone = DocumentProcessMap.ToDictionary(x => x...