Пример #1
0
 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();
     }
 }
Пример #2
0
        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();
            }
        }