protected override sealed void DoWork(DoWorkDTO dto) { var list = GetUnitList(dto).ToList(); int index = 0; int count = list.Count(); int count_success = 0; int count_failure = 0; int count_error = 0; ReportState(new ReportStateDTO() { StateDescription = string.Format("共读取到{0}个待处理项,开始处理...", count) }); foreach (T current in list) { index++; UnitHandleResultEnum unitHandleType = UnitHandleResultEnum.Success; try { CommonReturnType result = UnitHandle(current, dto); if (!result.IsSuccess) { unitHandleType = UnitHandleResultEnum.Failure; count_failure++; Log(new LogDTO() { Text = string.Format("{0}:失败:{1}", current.Key, result.Message) }); } else { unitHandleType = UnitHandleResultEnum.Success; count_success++; } } catch (Exception ex) { unitHandleType = UnitHandleResultEnum.Error; count_error++; Log(new LogDTO() { Text = string.Format("{0}:异常:{1}", current.Key, ex.Message) }); } ReportState(new ReportStateDTO() { StateDescription = string.Format("第{0}/{1}个${2}${3}__当前共成功{4}个,失败{5}个,异常{6}个", index, count, current.Key, GetUnitHanleResultStr(unitHandleType), count_success, count_failure, count_error) }); } Log(new LogDTO() { Text = string.Format("共成功{0}个,失败{1}个,异常{2}个", count_success, count_failure, count_error) }); }
private void StartTask(DoWorkDTO doworkdto) { try { DateTime startTime = DateTime.Now; ReportState(new ReportStateDTO() { StateDescription = string.Format("开始@{0}...", startTime.ToString("yyyy:MM:dd HH:mm:ss")) }); Log(new LogDTO() { Text = string.Format("开始@{0}...", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss")) }); if (_executePrepareDelegate != null) { _executePrepareDelegate(); } DoWork(doworkdto); if (_executeOverDelegate != null) { _executeOverDelegate(); } DateTime endTime = DateTime.Now; ReportState(new ReportStateDTO() { StateDescription = string.Format("结束@{0}...", endTime.ToString("yyyy:MM:dd HH:mm:ss")) }); Log(new LogDTO() { Text = string.Format("结束@{0}...", DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss")) }); } catch (Exception ex) { if (!_isLogException) { throw; } string err = ex.Message; ReportState(new ReportStateDTO() { StateDescription = err }); if (_executeOverDelegate != null) { _executeOverDelegate(); } Log(new LogDTO() { Text = err }); } }
/// <summary> /// 执行器启动,默认为异步执行,可以通过修改IsAsynchronous属性改为同步 /// </summary> /// <param name="dto"></param> public void Start(StartDTO dto) { //准备日志文件 InitLog(dto.LogFullPath); //启动 DoWorkDTO doworkdto = dto.DoWorkObj; //判断是同步执行还是异步执行 if (_isAsynchronous) { Thread mythread = new Thread ( () => { StartTask(doworkdto); } ); mythread.Start(); } else { StartTask(doworkdto); } }
protected abstract void DoWork(DoWorkDTO dto);
protected abstract List <T> GetUnitList(DoWorkDTO dto);
protected abstract CommonReturnType UnitHandle(T unit, DoWorkDTO dto);