2016-06-03 5 views
0

이것이 가능한지 확실하지는 않지만 여기에 아이디어가 있습니다. 한 경로에 여러 파일을 처리해야하며이를 동시에 수행하려고합니다. 내 응용 프로그램은 시간 초과 또는 다른 방법으로 오류가 발생할 수있는 FTP와 같은 외부 프로세스를 사용합니다 (이상적이지는 않지만 한 번에 한 가지만 고치려고합니다).C에서 평생 스레드를 사용하여 병렬 스레드를 시작하십시오.

모든 파일 (또는 일괄 처리)을 병렬로 처리하지만 각 스레드에게 소요 시간 (예 : 5 분)을 제한하려고합니다. 그래서 각 스레드를 시작하고 5 분 이내에 완료되지 않으면 그냥 죽여야합니다. 이 모든 스레드가 내가 5 분 전체주고 싶지 않아 같은 시간에 킥오프되지 않지만 각 스레드 5 분

를 받아야 가능성 (거의 확실)이기 때문에

는 여기에 몇 가지 사이비입니다 코드 :

DirectoryInfo di = new DirectoryInfo(somePath); 
List<FileInfo> files = di.GetFiles("*.txt"); // grab all text files in path 
Parallel.ForEach(files, currFile => ProcessFile(currFile)); 

이 시간의 일정 금액에 ProcessFile 각 호출을 제한하는 방법이 친절하게 각 파일에 대한 스레드를 분사하고 적절하게 경로의 각 .txt 파일에 ProccessFile을 실행하지만 것인가?

답변

0

귀하의 질문을 이해하면 이것이 가능하다고 생각합니다. 기본적으로 동일한 논리를 실행하는 여러 작업을 다른 파일에 적용하려고합니다. 그러나 그렇게한다면 너무 오래 걸리고 시간 초과되는 것을 원하지는 않습니다. 이 올바른 경우 다음 시간 초과 매개 변수를 사용하여 Task 것 같아요 찾는 것입니다. 빠른 검색은 나를 this SO 솔루션으로 데려왔습니다. 당신이 찾고있는 것과 비슷하다고 생각합니다. 본질적으로 파일을 처리하는 메서드를 만들 것입니다. 이 방식으로 작업을 사용하는 것은 가장 간단한 방법 중 하나이며이를 처리하는 가장 깨끗한 방법이라고 생각합니다. 다른 옵션에는 각 스레드 내에 타이머를 작성하거나 타이머가있는 각 스레드를 관리하는 클래스가 포함됩니다. 나는 이것을 할 수있는 거의 모든 방법으로 해냈다 (취소 토큰 제외). Task, async/await는 훨씬 더 좋은 선택이다.

관련 문제