private async Task ExecuteOperation()

in src/Microsoft.Atlas.CommandLine/Execution/WorkflowEngine.cs [72:107]


        private async Task ExecuteOperation(OperationContext context)
        {
            var operation = context.Operation;

            if (context.Operation.@foreach == null)
            {
                await ExecuteOperationInner(context);
            }
            else
            {
                var foreachContexts = new List<OperationContext>();
                var foreachValuesInList = _valuesEngine.ProcessValuesForeachIn(operation.@foreach.values, context.Values);

                foreach (var foreachValuesIn in foreachValuesInList)
                {
                    var foreachContext = context.CreateChildContext(operation, MergeUtils.Merge(foreachValuesIn, context.Values));
                    foreachContexts.Add(foreachContext);
                    await ExecuteOperationInner(foreachContext);
                }

                var valuesOut = default(object);
                if (operation.@foreach.output != null)
                {
                    valuesOut = _valuesEngine.ProcessValuesForeachOut(operation.@foreach.output, foreachContexts.Select(foreachContext => foreachContext.Values).ToList());
                }
                else
                {
                    foreach (var foreachValuesOut in foreachContexts.Select(foreachContext => foreachContext.ValuesOut))
                    {
                        valuesOut = MergeUtils.Merge(foreachValuesOut, valuesOut);
                    }
                }

                context.AddValuesOut(valuesOut);
            }
        }