我正在c#中构建一个警报服务(Windows服务)。此服务将启动并执行一些api调用。根据我从调用获得的结果和适用于该用户的设置,其他方法将在x个时间后触发。这一直持续到用户停止服务为止。
调用方法之间的时间可以是变量。所以在启动后第一次方法调用可以在1分钟之后,之后下一次调用可以在5分钟之后,之后的调用可以在10分钟之后。一切都取决于我从API获得的响应。
我一直在研究system.timers,但我找到的每个例子都有一个固定的时间事件发生,因此不适合我的需要。
答案 0 :(得分:2)
全局定义时间变量,并在每次响应后重置间隔时间
FYI
1分钟= 60000所以10分钟aTimer.Interval = 60000 * 10;
像这样使用
//defined globally
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
//api call goes here
aTimer.Interval=5000; // here you can define the time or reset it after each api call
aTimer.Enabled=true;
答案 1 :(得分:1)
使用一次性计时器,并在每次通话后重置。我通常使用System.Threading.Timer:
// When you first create the timer, set it for the initial time
Timer MyTimer = new Timer(TimerCallbackFunction, null, 60000, Timeout.Infinite);
将句点设置为Timeout.Infinite
会阻止计时器多次勾选。它只需勾选一次,然后无限期地等待,或直到你重新启动它。
在你的计时器回调中,做任何需要做的事情,然后重置计时器:
void TimerCallbackFunction(object state)
{
// Here, do whatever you need to do.
// Then set the timer for the next interval.
MyTimer.Change(newTimeoutValue, Timeout.Infinite);
}
这可以防止多个并发回调(如果你的超时值太短),并且还允许你指定下一个滴答的时间。