처리 된 데이터를 BlockingCollection
에 추가하여 Parallel.ForEach
을 통해 많은 양의 텍스트 파일을 처리하려고합니다.while (true) 루프를 EventWaitHandle로 변환 할 수 있습니까?
문제는 Task
taskWriteMergedFile이 콜렉션을 사용하고 적어도 800000 라인마다 결과 파일에 기록하기를 원합니다.
Task
을 생성 할 수 있도록 병렬 처리되어 있으므로 반복 내에서 컬렉션 크기를 테스트 할 수 없다고 생각합니다.
이 경우 작업의 while (true) 루프를 EventWaitHandle
으로 변환 할 수 있습니까?
const int MAX_SIZE = 1000000;
static BlockingCollection<string> mergeData;
mergeData = new BlockingCollection<string>(new ConcurrentBag<string>(), MAX_SIZE);
string[] FilePaths = Directory.GetFiles("somepath");
var taskWriteMergedFile = new Task(() =>
{
while (true)
{
if (mergeData.Count > 800000)
{
String.Join(System.Environment.NewLine, mergeData.GetConsumingEnumerable());
//Write to file
}
Thread.Sleep(10000);
}
}, TaskCreationOptions.LongRunning);
taskWriteMergedFile.Start();
Parallel.ForEach(FilePaths, FilePath => AddToDataPool(FilePath));
mergeData.CompleteAdding();