using System.Threading;
namespace SKMC.Api.Common.Tasks
{
///
/// 任务执行控制令牌,用于控制线程/工站任务的执行状态
/// 主要包含三种控制能力:
/// 1. 暂停 / 恢复(Pause / Resume)
/// 2. 取消执行(Cancel / Stop)
/// 3. 等待执行许可(SetWaitPoint)
/// 注意:
/// - Pause / Resume 属于可重复状态控制
/// - Cancel / Stop 为一次性终止操作,调用后不可恢复
///
public class TaskToken
{
public int Id { get; set; }
public CancellationTokenSource TokenSource { get; set; } = new CancellationTokenSource();
public ManualResetEvent ResetEvent { get; set; } = new ManualResetEvent(true);
///
/// 添加中断点
///
public void SetWaitPoint()
{
ResetEvent.WaitOne();
}
///
/// 取消
///
public void Cancel()
{
TokenSource.Cancel();
}
///
/// 是否取消
///
///
public bool IsCancelled()
{
return TokenSource.IsCancellationRequested;
}
///
/// 暂停
///
public void Pause()
{
ResetEvent.Reset();
}
///
/// 恢复
///
public void Resume()
{
ResetEvent.Set();
}
///
/// 停止
///
public void Stop()
{
Cancel();
Resume();
}
}
}