//Split workboolinfo list into two parts and generate two tasks into the queue private void EnqueuePageCountSizeTask(IEnumerable <WorkbookInfo> workbookInfos) { if (workbookInfos.Count() > 1) { var workbookSplits = workbookInfos.Split(2); var task1 = new Task(() => { var t = GetPageCountAndSize(ExcelPageCountSize1, workbookSplits.ElementAt(0)); t.Wait(); }); var task2 = new Task(() => { var t = GetPageCountAndSize(ExcelPageCountSize2, workbookSplits.ElementAt(1)); t.Wait(); }); PageSizeCountTaskQueue1.Enqueue(task1); PageSizeCountTaskQueue2.Enqueue(task2); } else { var task1 = new Task(() => { var t = GetPageCountAndSize(ExcelPageCountSize1, workbookInfos); t.Wait(); }); PageSizeCountTaskQueue1.Enqueue(task1); } }
//Execute queue private void ExecuteQueue() { if (!Task1Runing) { Task.Run(() => { while (PageSizeCountTaskQueue1.Count > 0) { Task1Runing = true; Task t; if (PageSizeCountTaskQueue1.TryDequeue(out t)) { t.Start(); t.Wait(); } } Task1Runing = false; }); } if (!Task2Runing) { Task.Run(() => { while (PageSizeCountTaskQueue2.Count > 0) { Task2Runing = true; Task t; if (PageSizeCountTaskQueue2.TryDequeue(out t)) { t.Start(); t.Wait(); } } Task2Runing = false; }); } }