using System; using System.Threading; using System.Threading.Tasks; namespace Binance.TradeRobot.Common { /// /// 延迟触发器 /// public class DelayTrigger { public DelayTrigger(int delayTime = 500) { if (delayTime < 500) delayTime = 500; this.delayTime = delayTime; } /// /// 延迟执行时间(ms) /// private int delayTime; /// /// 关键字 /// private string currentKey; /// /// 是否可以执行 /// private volatile bool canExecute; /// /// 是否正在延迟响应中 /// private volatile bool isDelaying; public Action OnExecute; public void SetKey(string key) { currentKey = key; if (isDelaying) { canExecute = false; return; } Task.Factory.StartNew(delegate { isDelaying = true; while (true) { canExecute = true; Thread.Sleep(delayTime); if (canExecute) { Console.WriteLine($"{currentKey} Execute at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")}"); OnExecute?.Invoke(currentKey); isDelaying = false; break; } } }); } } }