/// <summary>
        /// Executes a given nodes runtime code
        /// </summary>
        private void Execute(object ignore)
        {
            List<byte[]> data = null;
            List<byte[]> input = GatherInputData();

            Console.WriteLine(node.Type + " Starting, slot: " + node.Id + " of run " + run);

            // execute plugin task
            try
            {
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();

                if (plugin is IProcessPlugin)
                {
                    data = (plugin as IProcessPlugin).ProcessData(input);
                }
                else if (plugin is IOutputPlugin)
                {
                    string dir = string.IsNullOrWhiteSpace(node.Value) ? PipelineState.OutputDirectory : node.Value;

                    bool success = (plugin as IOutputPlugin).ExportData(dir, input);
                    if (!success) Console.WriteLine(plugin.Name + " failed");
                }
                else Console.WriteLine("TaskRunner encountered unexpected plugin type");

                stopwatch.Stop();
                Console.WriteLine(node.Type + " Finished in " + stopwatch.Elapsed + " ms, slot: " + node.Id + " of run " + run);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw new Exception("Task runner failed to execute node", e);
            }

            //post processing actions (triggering dependency, storing results)
            if (data != null) resultData.StoreResults(data, node.Id);
            executor.TriggerDependencies(node.Id);
        }