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;
			}
		}