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