string ProcessAndResult(FormBrowser form, string dataParam, ParamModel paramModel) { var resultModel = new ResultModel(); resultModel.IsSuccess = true; resultModel.Result = "666"; try { //设置并执行相应操作,核心方法 form.SetActionType(paramModel); try { //得到执行结果 while (!CommonCla.IsTimeout(paramModel.StartTime, paramModel.Timeout)) { resultModel.Result = form._result; if (resultModel.Result == null) { if (MonitorStopProcess(paramModel.StopKey)) { resultModel.Result = ArtificialCode.A_RequestNormalBreak.ToString(); break; } if (form.IsDisposed) { throw new Exception(ArtificialCode.A_RequestAccidentBreak.ToString()); } Thread.Sleep(100); } else { resultModel.IsSuccess = true; break; } } if (resultModel.Result == null) { throw new Exception(ArtificialCode.A_TimeOutResult.ToString()); } } catch (Exception ex)//获取结果发生错误 { resultModel.Result = ex.Message; //_log.ErrorFormat("耗时:{0}\r\n{1}\r\n{2}", CommonCla.GetMilliseconds(paramModel.StartTime), dataParam, resultModel.Result); } } catch (Exception ex)//解析参数发生错误 { //如果Start发生异常 form._isWorking = false; resultModel.Result = ex.Message; //_log.FatalFormat("{0}\r\nStart()\r\n{1}", paramModel.Method, ex.Message); } finally { Task.Run(() => { //本次执行完成,退出使用 //不阻塞执行,尽快返回结果 form.ProcessEnd(); }); } return(JsonConvert.SerializeObject(resultModel)); }
string Excute(string dataParam) { try { var paramModel = JsonConvert.DeserializeObject <ParamModel>(dataParam); ExcuteRecord(string.Format("请求接口:{0} 超时时间:{1}秒 使用窗口:{2}", paramModel.Method, paramModel.Timeout, paramModel.IsUseForm)); //是否使用窗口 if (paramModel.IsUseForm) { lock (_objLock) { if (_excuteForm != null) { if (!_excuteForm.IsDisposed) { //如果还在执行则直接返回,这个很重要 if (_excuteForm._isWorking) { return(JsonConvert.SerializeObject(new ResultModel() { IsSuccess = false, Result = ArtificialCode.A_ChangeProcess.ToString() })); } else { _excuteForm._isWorking = true; } } else { _excuteForm = GetProcessForm(); _excuteForm._isWorking = true; } } else { _excuteForm = GetProcessForm(); _excuteForm._isWorking = true; } } return(ProcessAndResult(_excuteForm, dataParam, paramModel)); } else { var process = ProcessFactory.GetProcessByMethod(paramModel); return(JsonConvert.SerializeObject(new ResultModel() { IsSuccess = true, Result = process.Excute(dataParam) })); } } catch (Exception ex) { //_log.FatalFormat("Excute()\r\n{0}", ex.Message); return(JsonConvert.SerializeObject(new ResultModel() { IsSuccess = false, Result = ex.Message })); } }