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