我正在处理下面的代码,并试图让它尽可能快。
基本上,每次在系统中触发事件时都会调用 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);
}
}
}
}