WhiskWork.Core.ParallelStepHelper.SplitForParallelism C# (CSharp) Method

SplitForParallelism() public method

public SplitForParallelism ( WorkItem workItem, WorkStep parallelRootStep ) : IEnumerable
workItem WorkItem
parallelRootStep WorkStep
return IEnumerable
        public IEnumerable<WorkItem> SplitForParallelism(WorkItem workItem, WorkStep parallelRootStep)
        {
            var childWorkItems = new List<WorkItem>();

            foreach (var subStep in _workflowRepository.GetChildWorkSteps(parallelRootStep.Path))
            {
                var childId = GetParallelId(workItem.Id, parallelRootStep, subStep);
                var childWorkItem = workItem.CreateChildItem(childId,WorkItemParentType.Parallelled).AddClass(subStep.WorkItemClass);

                childWorkItems.Add(childWorkItem);
            }

            return childWorkItems;
        }

Usage Example

Example #1
0
        private WorkItem CreateParallelledChildrenAndReturnWorkItemToMove(WorkItemTransition transition, WorkStep parallelStep)
        {
            var helper = new ParallelStepHelper(WorkflowRepository);

            var splitWorkItems = helper.SplitForParallelism(transition.WorkItem, parallelStep);

            foreach (var splitWorkItem in splitWorkItems)
            {
                WorkflowRepository.CreateWorkItem(splitWorkItem);

                WorkStep expandStep;
                var      isInExpandStep = WorkflowRepository.IsInExpandStep(transition.WorkItem, out expandStep);
                if (isInExpandStep)
                {
                    CreateTransientWorkSteps(splitWorkItem, expandStep);
                }
            }

            var idToMove       = ParallelStepHelper.GetParallelId(transition.WorkItem.Id, parallelStep, transition.WorkStep);
            var workItemToMove = splitWorkItems.First(wi => wi.Id == idToMove);

            return(workItemToMove);
        }
All Usage Examples Of WhiskWork.Core.ParallelStepHelper::SplitForParallelism