标准System.Timers.Timer行为存在问题.计时器以一定间隔提升Elapsed事件.但是当Elapsed事件处理程序内的执行时间超过计时器间隔时,线程池开始排队事件处理.这是我的问题.这是因为使用我的Elapsed事件处理程序,我从数据库中获取一些数据并使用它做一些事情,最后将结果保存回数据库.但是数据处理应该只提供一次.那么,有没有办法防止排队System.Timers.Timer的elapse事件.
作为此问题的插图,您可以考虑下一个测试程序:
public class EntryPoint
{
private static void TimeProc(object state, ElapsedEventArgs e)
{
Console.WriteLine("Current time {0} on the thread {1}", DateTime.Now, Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(20000);
}
static void Main(string[] args)
{
Console.WriteLine("Press <Enter> for finishing\n\n");
ThreadPool.SetMaxThreads(10, 10);
System.Timers.Timer MyTimer = new System.Timers.Timer(1000);
MyTimer.Elapsed += new ElapsedEventHandler(TimeProc);
MyTimer.Start();
Console.ReadLine();
MyTimer.Stop();
}
}
Run Code Online (Sandbox Code Playgroud)
可能的输出将如下:
Current time 03.02.2011 0:00:09 on the thread 4
Current time 03.02.2011 0:00:10 on the thread 5
Current time 03.02.2011 0:00:12 on the thread 6
Current time 03.02.2011 0:00:13 on …Run Code Online (Sandbox Code Playgroud)