У меня есть некоторый процесс, который выполняет итерацию по группе больших файлов по порядку и извлекает из них информацию для записи \ обновления наших баз данных. Эти файлы регулярно имеют несколько тысяч строк в каждом, поэтому я создал Parallel.ForEach для обработки нескольких строк одновременно в заданном файле (только обработка одного файла за раз, из-за необходимости применять каждый файл в порядке). Теперь мне нужно знать приблизительно, сколько из текущего файла было обработано, чтобы я мог дать руководству указание на оставшееся время выполнения. До сих пор у меня есть следующиеКак получить% от завершения Parallel.ForEach
public void MyProcess(FileItem file)
{
List<string> lines = file.GetLines(); //some process to get the lines to handle
long cntr = 0; //The counter to track
Parallel.ForEach(lines, crntLine =>
{
Console.Writeline(String.Format("Currently finished {0} out of {1} lines",cntr,lines.Count());
InterLocked.Increment(ref cntr);
//...Code to process crntLine here
});
}
Я не забочусь вообще о том, какие строки были обработаны, только сколько общее, так что может ответить на вопрос о том, как далеко он находится в текущем файле. Будет ли это дать мне то, что я ищу надежно?
Кажется, я не могу принять ответ еще на 5 минут, но это дало мне то, что мне нужно. Спасибо! – Rocky
Я попадаю в ловушку. Мне нужен процент, но этот ответ всегда будет «0.00%», когда я делаю это так, как вы предложили. Вот фактическая строка кода, в которой я использую 'double percentDone = (lineCount/results.Count()) * 100;' Что происходит? – Rocky
@Rocky Это 'cntr * 100/lines.Count' – Rabban