Exemplo n.º 1
0
        public static void RunInWorkItems <In>(List <In> input, RunWorkItemDel <In> action,
                                               WorkItemRunnerSettings settings)
        {
            List <Task> taskList  = new List <Task>();
            int         workSize  = settings.GetOptimalWorkSize(input.Count);
            int         currentID = 0;
            int         taskNr    = 0;

            Logger.Log(LogType.Log, $"Starting Tasks...", 2);
            while (currentID != input.Count)
            {
                int  len  = Math.Min(workSize, input.Count - currentID);
                int  id   = currentID;
                int  nr   = taskNr;
                Task task = new Task(() => action(input, id, len));
                task.ContinueWith(t => Logger.Log(LogType.Log, "Task: " + nr + " completed.", 2));

                taskList.Add(task);
                if (settings.UseMultithread)
                {
                    task.Start();
                }
                else
                {
                    task.RunSynchronously();
                }

                currentID += len;
                taskNr++;
            }

            Logger.Log(LogType.Log, $"Waiting for Tasks..", 2);
            Task.WaitAll(taskList.ToArray());
        }
Exemplo n.º 2
0
        public FLParser(FLInstructionSet instructionSet, BufferCreator bufferCreator,
                        WorkItemRunnerSettings settings = null) : base(typeof(FLParserInput), typeof(SerializableFLProgram))
        {
            InstructionSet         = instructionSet;
            BufferCreator          = bufferCreator;
            WorkItemRunnerSettings = settings ?? WorkItemRunnerSettings.Default;
            AddSubStage(new LoadSourceStage());
            AddSubStage(new RemoveCommentStage(this));
            AddSubStage(new StaticInspectionStage(this));
            AddSubStage(new ParseTreeStage(this));


            Verify();
        }
Exemplo n.º 3
0
        public FLScriptRunner(
            CLAPI instance, KernelDatabase dataBase, BufferCreator creator,
            FLInstructionSet instructionSet, FLProgramCheckBuilder checkBuilder, WorkItemRunnerSettings runnerSettings)
        {
            Db             = dataBase;
            InstructionSet = instructionSet;
            BufferCreator  = creator;

            Parser        = new FLParser(InstructionSet, BufferCreator, runnerSettings);
            ProgramChecks = checkBuilder;
            checkBuilder.Attach(Parser, true);

            Instance     = instance;
            ProcessQueue = new Queue <FlScriptExecutionContext>();
        }
Exemplo n.º 4
0
        public static List <Out> RunInWorkItems <In, Out>(List <In> input, RunWorkItemDel <In, Out> action,
                                                          WorkItemRunnerSettings settings)
        {
            List <Task <List <Out> > > taskList = new List <Task <List <Out> > >();
            int workSize  = settings.GetOptimalWorkSize(input.Count);
            int currentID = 0;
            int taskNr    = 0;
            int maxTasks  = input.Count / workSize;

            Logger.Log(LogType.Log, $"Starting {maxTasks} Tasks...", 2);
            while (currentID != input.Count)
            {
                int len = Math.Min(workSize, input.Count - currentID);
                int id  = currentID;
                int nr  = taskNr;
                Task <List <Out> > task = new Task <List <Out> >(() => action(input, id, len));
                task.ContinueWith(t => Logger.Log(LogType.Log, "Task " + nr + " of " + maxTasks + " completed.", 2));

                taskList.Add(task);
                if (settings.UseMultithread)
                {
                    task.Start();
                }
                else
                {
                    task.RunSynchronously();
                }

                currentID += len;
                taskNr++;
            }

            Logger.Log(LogType.Log, $"Waiting for Tasks..", 2);
            Task.WaitAll(taskList.ToArray());

            List <Out> ret       = new List <Out>(input.Count);
            int        nextIndex = 0;

            for (int i = 0; i < taskList.Count; i++)
            {
                ret.AddRange(taskList[i].Result);
            }

            return(ret);
        }