public void Execute(VisualCounter counter) { if (counter.Counter >= counter.MaxWorkers) return; counter.AddWorker(); for (var i = 0; i < 3; i++) { var ms = counter.Id%2 == 0 ? 1000 : 2000; Thread.Sleep(ms); } counter.RemoveWorker(); }
private void RunSmartWorkersInPriorityOrder(SmartWorker worker, VisualCounter[] counters) { while (true) { var item = counters .Select((counter, i) => new Tuple<int, VisualCounter>(i, counter)) .Where(x => x.Item2.Counter != x.Item2.MaxWorkers) .OrderBy(x => x.Item2.Counter) .FirstOrDefault(); if (item != null) { worker.Execute(counters[item.Item1]); } } }
private void RunSmartWorkersInRandom(SmartWorker worker, VisualCounter[] counters) { while (true) { var index = RandomNumber.Next(); worker.Execute(counters[index]); } }
private void RunSmartWorkersInSequence(SmartWorker worker, VisualCounter[] counters) { var index = RandomNumber.Next(); while (true) { worker.Execute(counters[index]); if (++index > 24) index = 0; } }