/// <summary>
        /// Builds a pipelines that is a consistent amount of pipelines throughout execution
        /// </summary>
        /// <returns>prepared pipelines</returns>
        private static PipelineExecutor[] BuildLinearPipeline()
        {
            int inputAmount = inputs[0].plugin.InputDataQuantity(NodeValueOrInput(inputs[0].nodeId));

            Console.WriteLine(inputAmount + " valid files found!");

            //Ensure consistent input amount
            for (int i = 1; i < inputs.Length; i++)
            {
                if (inputAmount != inputs[i].plugin.InputDataQuantity(NodeValueOrInput(inputs[i].nodeId)))
                {
                    throw new InputPluginQuantityMismatchException();
                }
            }

            //create a pipeline for each input data
            PipelineExecutor[] pipes = new PipelineExecutor[inputAmount];
            for (int i = 0; i < inputAmount; i++)
            {
                pipes[i] = new PipelineExecutor(dependencyGraph, staticData, i, specialNodes, InputDirectory, OutputDirectory);
            }
            foreach (SyncNode sync in specialNodes.SyncInformation.SyncNodes)
            {
                sync.StateInfo(pipes.Length, pipes);
            }

            PrepareInputData(inputs, pipes);

            return(pipes);
        }
 public TaskRunner(IPlugin plugin, DependentNode node, DataStore resultData, DataStore staticData, PipelineExecutor pipe, int run)
 {
     this.plugin = plugin;
     this.node = node;
     this.resultData = resultData;
     this.staticData = staticData;
     executor = pipe;
     this.run = run;
 }