Files
1440WGJ/JY.Model/Common/TaskScheduler.cs
T

79 lines
1.9 KiB
C#
Raw Normal View History

2026-07-21 19:37:29 +08:00
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace JY.Model.Common
{
/// <summary>
/// 定时任务管理器
/// </summary>
public class TaskScheduler : IDisposable
{
private readonly ConcurrentDictionary<Guid, ScheduledTask> _tasks
= new ConcurrentDictionary<Guid, ScheduledTask>();
/// <summary>
/// 添加一个新任务
/// </summary>
public Guid AddTask(TimerCallback callback, int interval, object state = null)
{
var taskId = Guid.NewGuid();
var task = new ScheduledTask(taskId, callback, interval, state);
_tasks[taskId] = task;
task.Start();
return taskId;
}
/// <summary>
/// 移除一个任务
/// </summary>
public bool RemoveTask(Guid taskId)
{
if (_tasks.TryRemove(taskId, out var task))
{
task.Dispose();
return true;
}
return false;
}
/// <summary>
/// 修改任务间隔
/// </summary>
public bool ChangeInterval(Guid taskId, int newInterval)
{
if (_tasks.TryGetValue(taskId, out var task))
{
task.ChangeInterval(newInterval);
return true;
}
return false;
}
/// <summary>
/// 停止所有任务
/// </summary>
public void StopAll()
{
foreach (var task in _tasks.Values)
{
task.Stop();
}
}
public void Dispose()
{
StopAll();
foreach (var task in _tasks.Values)
{
task.Dispose();
}
_tasks.Clear();
}
}
}