/// <summary> /// Start the job, block until its done. /// </summary> public virtual void Process() { _totalTasks = LoadWorkload(); if (ThreadCount == 1) { Object task; int currentTask = 0; while ((task = RequestNextTask()) != null) { currentTask++; var context = new JobUnitContext { JobUnit = task, Owner = this, TaskNumber = currentTask }; var worker = new JobUnitWorker(context); worker.Run(); } } else { Parallel.For(0, _totalTasks, currentTask => { Object task = RequestNextTask(); var context = new JobUnitContext { JobUnit = task, Owner = this, TaskNumber = currentTask }; var worker = new JobUnitWorker(context); worker.Run(); }); } }