public void SearchOKS(string columnName, int startReadInxed) { try { ExcelAppReadData read = new ExcelAppReadData(excelPath); read.Run("A", 2); MultiThread threads = new MultiThread(read._elems, numOfThreads, threadLenght, driverPath); threads.ThreadMaster(); data = threads.output; } finally { ExcelAppWriteData write = new ExcelAppWriteData(data); write.Run(); } }
public void ThreadMaster() { try { for (int i = 0; i < output.Count(); i += numOfThreads) { // Пока число необработанный элементов больше количеств потоков if (output.Count() - i >= numOfThreads) { Task[] tasks1 = new Task[numOfThreads]; for (var j = 0; j < tasks1.Length; j++) { var index = i + j; tasks1[j] = Task.Factory.StartNew(() => { Parser parser = new Parser(driverPath, output.ElementAt(index)); parser.parser(); }); } Task.WaitAll(tasks1); // ожидаем завершения задач } // Создаем потоки на оставшееся число элементов output else { int N = output.Count() - i; Task[] tasks2 = new Task[N]; for (var j = 0; j < tasks2.Length; j++) { var index = i + j; tasks2[j] = Task.Factory.StartNew(() => { Parser parser = new Parser(driverPath, output.ElementAt(index)); parser.parser(); }); } Task.WaitAll(tasks2); } } } catch { ExcelAppWriteData write = new ExcelAppWriteData(output); write.Run(); } }