相关疑难解决方法(0)

如何防止System.Timers.Timer在线程池上排队执行?

标准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)

.net c# vb.net multithreading timer

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

multithreading ×1

timer ×1

vb.net ×1