我正在处理下面的代码,并试图让它尽可能快。
基本上,每次在系统中触发事件时都会调用 execute 方法。我正在测试的是查看自上次执行减少以来是否已经过去了 x 分钟。如果 x 分钟过去了,那么我们应该执行任务。
由于事件可以从任何线程触发并且发生得非常快,所以我认为在锁之外触发任务(即使它是一个任务)会比在锁中更好。
有人对如何改进有任何反馈吗?
public class TriggerReduce
{ 
    private readonly object _lock = new object();
    private readonly int _autoReduceInterval = 5;
    private DateTime _lastTriggered;
    public void Execute(object sender, EventArgs e)
    {
        var currentTime = DateTime.Now;
        if (currentTime.Subtract(_lastTriggered).Duration().TotalMinutes > _autoReduceInterval)
        {
            var shouldRun = false;
            lock (_lock)
            {
                if (currentTime.Subtract(_lastTriggered).Duration().TotalMinutes > _autoReduceInterval)
                {
                    _lastTriggered = currentTime;
                    shouldRun = true;
                }
            }
            if (shouldRun)
            {
                Task.Factory.StartNew(() =>
                {
                    //Trigger reduce which is a long running task
                }, TaskCreationOptions.LongRunning);
            }
        }
    }
}