public static void CorrectMFC(string label) { var cells = from cell in Root.GetDirectories() where ConfigInfo.NameList.ContainsKey(cell.Name) select new DirectoryInfo($"{cell.FullName}\\{label}\\MFC"); // 编译到运行的管线 var pipeline = new Queue <string>(); // 设置编译线程 Action compileEvent = async() => { foreach (var cell in cells) { var compiler = new Compiler(); var compileResult = await compiler.BuildMFC(cell); if (compileResult.ExecFile != null) { lock (pipeline) pipeline.Enqueue(compileResult.ExecFile.FullName); } } lock (pipeline) pipeline.Enqueue("end"); }; // 设置运行线程 Action executeEvent = async() => { var executableFile = "start"; var redPen = new RedPen(); while (executableFile != "end") { if (File.Exists(executableFile)) { redPen.CorrectMFC(new FileInfo(executableFile)); } await Task.Run(() => { while (pipeline.Count != 0) { ; } }); executableFile = pipeline.Dequeue(); } }; Parallel.Invoke(compileEvent, executeEvent); }
/// <summary> /// 测试 MFC 项目 /// </summary> /// <param name="label">测试 Cell 标签</param> /// <returns></returns> public async Task <Result> CorrectMFC(string label) { // 1. 编译 var compileResult = await compiler.BuildMFC(new DirectoryInfo($"{Root.FullName}\\{label}\\MFC")); // 2. 执行测试 if (compileResult.ExecFile == null) { return new Result() { State = false, Info = compileResult.Info } } ; redPen.CorrectMFC(compileResult.ExecFile); return(new Result() { State = true, Info = "Success!" }); }