Files
zszq-trs/Framework/YLErp.Jobs/Imp/BaseJob.cs
T
2024-05-09 14:06:26 +08:00

113 lines
2.8 KiB
C#

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