zoukankan      html  css  js  c++  java
  • 解决timer重入问题

    System.Timers.Timer 是可以重入的,就是说在一个timer正在执行的时候,如果下次定时器到期了,会有一个新的线程执行timer的动作,也就是发生了重入。

    根据程序的逻辑,这种情况有可能是我们不希望发生的。可以通过加锁的方式解决此问题。见如下代码:

    private readonly object objNotifyTimerLock = new object();
            
    /// <summary>
            
    /// 定时处理邮件发送任务
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void notifyTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                
    if (Monitor.TryEnter(objNotifyTimerLock))
                {
                    
    try
                    {
                        Application[
    "Timer_Notify_LastActiveTime"= DateTime.Now;
                        NotifyerMgr.Instance.Execute();
                    }
                    
    finally
                    {
                        Monitor.Exit(objNotifyTimerLock);
                    }
                }

            }
  • 相关阅读:
    InnoDB和MyISAM区别
    include和require的区别
    php的魔术方法
    php中heredoc的使用方法
    20条常见的编码陷阱
    php header 跳转
    php.ini设置详解
    session的实现原理 大网站应用应注意的问题
    Ruby on Rails 开发实践相关命令参考
    IBM WebSphere Portal6 最佳项目实践
  • 原文地址:https://www.cnblogs.com/ddeef/p/1739641.html
Copyright © 2011-2022 走看看