mirror of
https://github.com/KevinWG/OSS.Tools.git
synced 2026-10-18 14:41:07 +08:00
90 lines
2.4 KiB
C#
90 lines
2.4 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace OSS.Tools.TimerJob
|
|
{
|
|
/// <summary>
|
|
/// 任务基类
|
|
/// 如果执行时间过长,重复触发时 当前任务还在进行中,则不做任何处理
|
|
/// </summary>
|
|
public abstract class BaseJobExecutor : IJobExecutor
|
|
{
|
|
private bool _isRunning = false;
|
|
private bool _jobCommandStarted = false;
|
|
|
|
/// <summary>
|
|
/// 任务名称
|
|
/// </summary>
|
|
public string JobName { get; protected set; }
|
|
|
|
/// <summary>
|
|
/// 运行状态
|
|
/// </summary>
|
|
public StatusFlag StatusFlag
|
|
{
|
|
get
|
|
{
|
|
if (_jobCommandStarted && _isRunning)
|
|
return StatusFlag.Running;
|
|
if (_jobCommandStarted && !_isRunning)
|
|
return StatusFlag.Waiting;
|
|
if (!_jobCommandStarted && _isRunning)
|
|
return StatusFlag.Stopping;
|
|
return StatusFlag.Stopped;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 开始任务
|
|
/// </summary>
|
|
public async Task StartJob(CancellationToken cancellationToken)
|
|
{
|
|
// 任务依然在执行中,不需要再次唤起
|
|
if (StatusFlag!=StatusFlag.Waiting)
|
|
return;
|
|
|
|
_isRunning = _jobCommandStarted = true;
|
|
|
|
if (!cancellationToken.IsCancellationRequested)
|
|
{
|
|
await Executing(cancellationToken);
|
|
}
|
|
_isRunning = false;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 任务执行
|
|
/// </summary>
|
|
protected abstract Task Executing(CancellationToken cancellationToken);
|
|
|
|
/// <summary>
|
|
/// 任务停止
|
|
/// </summary>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
protected virtual Task Stopped(CancellationToken cancellationToken)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 结束任务
|
|
/// </summary>
|
|
public Task StopJob(CancellationToken cancellationToken)
|
|
{
|
|
_jobCommandStarted = false;
|
|
return Stopped(cancellationToken);
|
|
}
|
|
/// <summary>
|
|
/// 结束任务
|
|
/// </summary>
|
|
public Task StopJob()
|
|
{
|
|
return StopJob(CancellationToken.None);
|
|
}
|
|
}
|
|
}
|