Exemple #1
0
        //Could be annotated by CallStackAnnotation.AnnotateAction()
        //could throw OCE as a valid result
        private void ExecuteOneAction(bool blockIfNoActionAvailable)
        {
            Assertion.AssertCurrentThread(Thread);

            PrioritizedAction prioritizedAction = blockIfNoActionAvailable ? myQueue.Storage.ExtractOrBlock() : myQueue.Storage.ExtractOrDefault();

            if (prioritizedAction == null)
            {
                return;
            }
            var action = prioritizedAction.Action;

            try
            {
                action();
            }
            catch (Exception e)
            {
                myLog.Error(e);
            }
            finally
            {
                Interlocked.Decrement(ref myQueue.ToProcessCount);
            }
        }