先说一下背景:某项目需要后台定时进行特殊处理,将处理结果返回到前端。由于涉及到内外网交互、GIS空间分析等操作,而且项目属于省级类型,最终用户会很多,对于后台任务的稳定性要求较高,同时需要在内外网分别部署以完成交互工作。
问题:
(1)程序很简单,一个窗体、一个按钮,用户交互性不好;
(2)多个任务由多个独立的程序承担,开启的应用程序多,维护性不好。
正文:
其实一开始我只是想检查一下代码解决一下容易出错的问题,不料打开解决方案后,对于代码的结构、规范感觉一脸懵逼。因为处理数据源不同,大段的重复代码;大量被吃掉的异常;频繁的条件结果……。
一个10多年的老程序员无法容忍这种情况,于是开始改造之路,花了2天时间
把功能逻辑进行了修改,同时提炼了一个插件式后台任务管理程序,并规范了后台任务的编写规范。
程序特点:
1.插件式
定义了task插件文件,用户只需要编写dll,并编辑tsk文件即可注册到管理程序;
2.统一的日志管理
实现了简单的日志管理,每个任务插件的日志独立存储,便于用户排查问题。
3.统一的编码规范
自定义Task时,只需要实现DoCustomWork方法,在该方法中完成实际逻辑。
4.定义了PreLoaded类型的任务,PreLoaded任务拥有最优先运行权限,且只执行1次,用于完成初始化操作,如ArcEngine许可初始化。只有PreLoaded任务执行完毕后,才后执行普通任务。
5.可以实时修改任务的配置,如:是否自动运行、奔溃后是否自动重启、重启次数、任务运行间隔时间等。