private void ParallelPreprocess() { var tasks = new PreprocessTasks(); foreach (var script in GoalScripts) { tasks.Inputs.Enqueue(script); } PreprocessTasks[] threadTasks = new[] { tasks, tasks, tasks, tasks }; Task.WhenAll(threadTasks.Select(task => Task.Run(() => { Preprocess(task); }))).Wait(); }
private void Preprocess(PreprocessTasks tasks) { var preprocessor = new Preprocessor(); while (tasks.Inputs.TryDequeue(out GoalScript script)) { var scriptText = Encoding.UTF8.GetString(script.ScriptBody); string preprocessed = null; if (preprocessor.Preprocess(scriptText, ref preprocessed)) { script.ScriptBody = Encoding.UTF8.GetBytes(preprocessed); } } }