using System.Collections.Concurrent; using Serilog; namespace DispenserCommon.Scheduler; public class JobScheduler { private static readonly ConcurrentDictionary Tasks = new(); /// /// 添加调度任务 /// /// /// /// /// public static void AddTask(string name, Action action, int interval = 100, int delay = 0) { try { Task.Run(async () => { if (Tasks.ContainsKey(name)) return; if (delay > 0) { await Task.Delay(delay); } Tasks[name] = new ExecuteTask(name, action, interval); }); } catch (Exception e) { Log.Error(e, $"添加 {name} 任务失败"); } } /// /// 移除任务 /// /// public static void RemoveTask(string name) { if (Tasks.TryRemove(name, out var task)) task.Dispose(); } }