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);
                    }
                }

            }
  • 相关阅读:
    线上项目部署
    day26 面向对象 单例模式总结
    阿里云服务器,更换操作系统步骤总结
    后端for循环补充
    前端,css
    django-admin 仿写stark组件action,filter筛选过滤,search查询
    7.20晚作业
    用户和群组管理
    7.19 晚作业
    目录和文件管理
  • 原文地址:https://www.cnblogs.com/ddeef/p/1739641.html
Copyright © 2011-2022 走看看