namespace OSS.Tools.TimerJob
{
///
/// 任务基类
/// 如果执行时间过长,重复触发时 当前任务还在进行中,则不做任何处理
///
public abstract class Internal_BaseExecutor
{
#region 开始结束异步方法
private bool _isRunning;
private bool _jobCommandStarted;
///
/// 任务运行状态
///
public StatusFlag StatusFlag
{
get
{
if (_jobCommandStarted)
{
return _isRunning ? StatusFlag.Running : StatusFlag.Waiting;
}
return _isRunning ? StatusFlag.Stopping : StatusFlag.Stopped;
}
}
///
/// 开始任务
///
public async Task StartAsync(CancellationToken cancellationToken)
{
// 任务依然在执行中,不需要再次唤起
if (_isRunning)
return;
_isRunning = _jobCommandStarted = true;
try
{
if (!cancellationToken.IsCancellationRequested)
{
await InternalStartJob(cancellationToken);
}
}
catch
{
_isRunning = false;
throw;
}
_isRunning = false;
}
///
/// 结束任务
///
public Task StopAsync(CancellationToken cancellationToken)
{
_isRunning = _jobCommandStarted = false;
return InternalStopJob(cancellationToken);
}
#endregion
#region 扩展定义(内部)
///
/// 启动任务方法(内部扩展)
///
///
///
internal abstract Task InternalStartJob(CancellationToken cancellationToken);
///
/// 启动任务方法(内部扩展)
///
///
///
internal abstract Task InternalStopJob(CancellationToken cancellationToken);
#endregion
}
}