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
}
}