私は以下のコードに取り組んでおり、できるだけ速くしようとしています。
基本的に、システムでイベントがトリガーされるたびに execute メソッドが呼び出されます。私がテストしているのは、reduce が最後に実行されてから 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);
}
}
}
}