internal override IEnumerable <WorkflowDecision> Decisions(IWorkflow workflow) { var decisions = new List <WorkflowDecision>(); var childItems = _completedWorkflowItem.Children().ToArray(); if (!childItems.Any()) { return new[] { new CompleteWorkflowDecision(DefaultWorkflowCompletedResult, true) } } ; var schedulableChildItems = childItems.Where(s => s.AreAllParentBranchesInactive(exceptBranchOf: _completedWorkflowItem)); //Current continue item is tracked to avoid recursion. Need to better represent the intention. foreach (var childItem in schedulableChildItems) { if (_completedWorkflowItem.HasContinueItem(childItem)) { continue; } _completedWorkflowItem.PushContinueItem(childItem); try { decisions.AddRange(childItem.ScheduleDecisions()); } finally { _completedWorkflowItem.PopContinueItem(); } } return(decisions); }