113 lines
2.8 KiB
C#
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
|
|
}
|
|
}
|