0
我想要創建一個方法,它將返回一個可以每毫秒調用一次的委託,但是我想限制它在每次調用時都運行緩慢的操作, 5秒內至少說一次。只能每X秒運行一次內部代碼的代理
試圖用Timer和Stopwatch實現,但不能堅持經濟實惠的解決方案。
1的方法:
public Func<bool> GetCancelRequestedFunc(string _taskName)
{
var checkStatus = false;
var timer = new Timer(5000);
timer.Elapsed += (sender, args) => { checkStatus = true; };
return() =>
{
if (checkStatus)
{
bool result;
checkStatus = false;
//long operation here
return result;
}
return false;
};
}
1的方法似乎更對我然而它不工作 - 長運在這裏永遠不會調用,我無法找出原因。可能是需要通過checkStatus
爲ref
,但不知道如何使它在這種情況下
第二個辦法:
public Func<bool> GetCancelRequestedFunc(string _taskName)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
return() =>
{
var mod = stopwatch.ElapsedMilliseconds % 5000;
if (mod > 0 && mod < 1000)
{
bool result;
//long operation here
return result;
}
return false;
};
}
這一個工程......但非常不可靠的,因爲它似乎在6日執行的檢查第二,如果委託調用。但是它會在第6秒鐘內一直被調用。
你能說第一種方法有什麼問題,或者可能會提示更好的方法嗎?
這完美的作品,謝謝。 – Vladimirs