private static void Process() { while (true) { if (shutdown) { return; } IdlingMeterQueueItem <int> item = null; lock (sync) { if (queue.Count > 0) { item = queue.Dequeue(); } } if (item != null) { DispatchItem(item); } else { pass.WaitOne(); } } }
public static void DecrementResourceUsage(string resourceName) { IdlingMeterQueueItem <int> item = new IdlingMeterQueueItem <int> { ResourceName = resourceName, DifferenceValue = 1, Operation = IdlingMeterOperation.Decrease, Time = DateTime.Now }; lock (sync) { queue.Enqueue(item); pass.Set(); } }
private static void DispatchItem(IdlingMeterQueueItem <int> item) { switch (item.Operation) { case IdlingMeterOperation.Increase: IncrementResourceUsagePrivate(item.ResourceName, item.DifferenceValue, item.Time); break; case IdlingMeterOperation.Decrease: DecrementResourceUsagePrivate(item.ResourceName, item.DifferenceValue, item.Time); break; default: throw new NotSupportedException("Incorrect queue operation."); } }