public void Run() { while (true) { try { waitForWork.Wait(); while (jobIds.TryDequeue(out var jobHandle)) { while (!JobWorkersManager.CanExecuteGroup(jobHandle.group)) { Thread.Sleep(0); } if (jobHandle.executor.ExecuteJob(jobHandle)) { JobWorkersManager.SignalComplete(jobHandle); } } while (JobWorkersManager.TryStealWork()) { } waitForWork.Reset(); } catch (Exception ex) { Console.WriteLine(ex); } } }
public void ConcurrentQueueWorkers() { var group = JobWorkersManager.StartJobGroup(); for (int i = 0; i < numJobs; i++) { BenchJob job = new BenchJob(); job.f1 = i; job.f2 = i + 1; JobWorkersManager.QueueJob(job, group); } JobWorkersManager.CompleteAll(); }
public void Setup() { ChannelJobs.Setup(); JobWorkersManager.Setup(); }