Задача многопоточного архивирования файлов. Элементы в очереди не по порядку - C#
Формулировка задачи:
Поставлена задача многопоточного архивирования файлов.
Есть 3 метода:
- Считать Из Файла Блок Данных и Добавить в Очередь На Сжатие,
- Взять блок из очереди, сжать его и добавить во вторую очередь на запись в файл
- Взять блок из второй очереди и записать его в файл
Решение задачи: «Задача многопоточного архивирования файлов. Элементы в очереди не по порядку»
textual
Листинг программы
static void ProcessFile(string inputPath, string outputPath)
{
var inputLines = new BlockingCollection<string>();
var processedLines = new BlockingCollection<string>();
// Stage #1
var readLines = Task.Factory.StartNew(() =>
{
try
{
foreach (var line in File.ReadLines(inputPath))
{
inputLines.Add(line);
}
}
finally { inputLines.CompleteAdding(); }
});
// Stage #2
var processLines = Task.Factory.StartNew(() =>
{
try
{
inputLines.GetConsumingEnumerable().AsParallel().AsOrdered().ForAll(x=>processedLines.Add(x));
}
finally { processedLines.CompleteAdding(); }
});
// Stage #3
var writeLines = Task.Factory.StartNew(() =>
{
File.WriteAllLines(outputPath, processedLines.GetConsumingEnumerable());
});
Task.WaitAll(readLines, processLines, writeLines);
}