/// <summary> /// Checks for runnable Operations in Queue /// </summary> public void CheckQueue() { DateTime currentInstant = DateTime.Now; List <OperationContext> runnableOperations = new List <OperationContext>(); lock (queuedOperations) { while (queuedOperations.Count > 0 && queuedOperations.Peek().RunDate < currentInstant) { runnableOperations.Add(queuedOperations.Dequeue()); } } foreach (OperationContext operation in runnableOperations) { RunOperation(operation); } lock (queuedOperations) { foreach (OperationContext operation in runnableOperations) { OperationContext x = operation.GetNext(); if (x != null) { queuedOperations.Enqueue(x); } } if (queuedOperations.Count > 0) { if (queuedOperations.Peek().RunDate < currentInstant) { CheckQueue(); } else { NextRunDate = queuedOperations.Min(x => x.RunDate); } } } }