namespace YLErp.Jobs.Imp { /// /// 任务基类 /// public abstract class BaseJob : IJob { private IYcLogger logger = LogFactory.GetLogger("Job日志"); private object lockObject = new object(); /// /// 开始运行任务 /// public void Excute() { // 开始任务 bool isStartJob = StartAsync().Result; if (!isStartJob) return; Task.Run(() => { try { // 执行任务 JobImp(); } catch (Exception ex) { logger.Error(ex); } }).ContinueWith(t => { StopAsync().Wait(); }); } /// /// 获取任务状态 /// /// public abstract JobStatus GetJobStatus(); /// /// 设置任务状态 /// /// public abstract void SetJobStatus(JobStatus status); /// /// 开始任务 /// /// public virtual async Task StartAsync() { return await Task.Run(() => { lock (lockObject) { var Status= GetJobStatus(); if (Status == JobStatus.Init || Status == JobStatus.Stop) { SetJobStatus(JobStatus.Start); return true; } else if (Status == JobStatus.Start) { return false; } return true; } }); } /// /// 停止任务 /// /// public virtual async Task StopAsync() { return await Task.Run(() => { SetJobStatus(JobStatus.Stop); return true; }); } /// /// 任务的具体业务实现 /// /// public abstract Task JobImp(); } /// /// 任务状态枚举 /// public enum JobStatus { /// /// 初始状态 /// Init, /// /// 开始状态 /// Start, /// /// 停止状态 /// Stop } }