我試圖通過Parallel.ForEach
將處理的數據添加到BlockingCollection
來處理大量的文本文件。可以將(true)循環轉換爲EventWaitHandle嗎?
問題是我想要Task
taskWriteMergedFile消耗集合並將它們寫入結果文件至少每隔800000行。
我想我不能在迭代中測試集合的大小,因爲它是平行的,所以我創建了Task
。
在這種情況下,我可以將任務中的(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();