我正在尝试通过Parallel.ForEach
将处理后的数据添加到BlockingCollection
.
问题是我希望Task
taskWriteMergedFile 至少每 800000 行消耗集合并将它们写入结果文件。
我想我无法在迭代中测试集合大小,因为它是并行的,所以我创建了Task
.
EventWaitHandle
在这种情况下,我可以将任务中的 while(true) 循环转换为吗?
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();