private void BtnSave_Click(object sender, EventArgs e) { try { this.BoosterService.SaveValidation(); var serviceConfig = new ServiceConfig(); if (!string.IsNullOrEmpty(this.BoosterService.Id)) { serviceConfig = this.MapleConfig.ServiceData.First(x => x.Guid == this.BoosterService.Id); } else { serviceConfig.Guid = Guid.NewGuid().ToString(); } serviceConfig.ServiceTypeId = this.BoosterService.ServiceTypeId; serviceConfig.ServicePolicy = this.BoosterService.ServicePolicy; serviceConfig.ServiceName = this.BoosterService.ServiceName; serviceConfig.ServiceGroup = this.BoosterService.ServiceGroup; serviceConfig.ServiceDescription = this.BoosterService.ServiceDescription; serviceConfig.Operations = JsonConvert.SerializeObject(this.BoosterService.Operations.ToList()); if (string.IsNullOrEmpty(this.BoosterService.Id)) { this.MapleConfig.ServiceData.Add(serviceConfig); } //序列化成ServiceObject保存起来 this.MapleConfig.Save(); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
private void StartAllService() { LockAllControl(!Start); Task.Run(() => { this.LogTxt($"----开始并行执行任务,任务数量:{this.MapleConfig.ServiceData.Where(x => x.IsRun).Count()}个----", EnumColor.Blue); Parallel.ForEach(this.MapleConfig.ServiceData.Where(x => x.IsRun), new Action <ServiceConfig>(t => { ServiceConfig config = t; Queue <ServiceConfig> queueService = new Queue <ServiceConfig>(); AbstractBoosterService runService = null; do { if (queueService.Count > 0) { config = queueService.Dequeue(); } this.LogTxt($"初始化服务规则:“{config.ServiceDescription}”,请稍后。"); runService = ServiceBuilder.ReBuildService(config, true); var runOperations = runService.Operations; var operations = runOperations.GroupBy(x => x.OperateTarget).OrderBy(x => x.Key); this.LogTxt($"初始化任务:“{config.ServiceDescription}”完成,有{operations.Count()}个操作进行。策略:{runService.ServicePolicy}"); try { this.LogStatus(runService.ServiceDescription); //分别循环 1,2,3 个方框内服务。 foreach (var item in operations) { do { foreach (var operation in item.SelectMany(x => x.Operations)) { operation.HandleOperationMethod(runService, (m, p) => { operation.ExeuteOperationMethod(runService, m, p); }); int i = 0; while (Stop && Start) { if (i == 0) { this.LogTxt($"{runService.ServiceDescription}已经暂停,请停止或恢复暂停。", EnumColor.Red); } Thread.Sleep(100); i++; } } } while (runService.ServicePolicy == ServicePolicyEnum.Loop && item.Key == "1" && Start); } //遍历循环已经结束 this.LogTxt($"{runService.ServiceDescription}已经执行完毕,继续执行下一个服务。", EnumColor.Blue); if (runService.AnotherOperations != null && runService.AnotherOperations.Count > 0) { foreach (var item in runService.AnotherOperations) { queueService.Enqueue(this.MapleConfig.ServiceData.First(x => x.Guid == item)); } } } catch (Exception ex) { this.LogTxt($"异常终止了服务,{runService.ServiceDescription},错误信息{ex.Message}", EnumColor.Red); runService = null; } if (!Start) { queueService.Clear(); break; } } while (queueService.Count > 0); })); }); }