• 技术文章 >后端开发 >C#.Net教程

    ASP.NET 定时器回调方法的重入

    高洛峰高洛峰2017-02-21 14:54:16原创937
    话不多说,请看代码:

    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace NET.MST.Sixth.Reenter
    {
      class Reenter
      {
        //用来造成线程同步问题的静态成员
        private static int TestInt1=0;
        private static int TestInt2 = 0;
        private static object locko = new object();
        static void Main(string[] args)
        {
          Console.WriteLine("System.Timers.Timer 回调方法重入测试:");
          TimersTimerReenter();
          //这里确保已经开始的回调方法有机会结束
          System.Threading.Thread.Sleep(2 * 1000);
          Console.WriteLine("System.Threading.Timer 回调方法重入测试:");
          ThreadingTimerReenter();
          Console.Read();
        }
        /// <summary>
        /// 展示System.Timers.Timer的回调方法重入
        /// </summary>
        static void TimersTimerReenter()
        {
          System.Timers.Timer timer = new System.Timers.Timer();
          timer.Interval = 100;    //100毫秒
          timer.Elapsed += TimersTimerHandler;
          timer.Start();
          System.Threading.Thread.Sleep(2 * 1000); //运行2秒
          timer.Stop();
        }
        /// <summary>
        /// 展示System.Threading.Timer的回调方法重入
        /// </summary>
        static void ThreadingTimerReenter()
        {
          //100毫秒
          using (System.Threading.Timer timer = new System.Threading.Timer
           (new System.Threading.TimerCallback(ThreadingTimerHandler), null, 0, 100))
          {
            System.Threading.Thread.Sleep(2 * 1000); //运行2秒
          }
        }
        /// <summary>
        /// System.Timers.Timer的回调方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private static void TimersTimerHandler(object sender,EventArgs args)
        {
          lock (locko)
          {
            Console.WriteLine("测试整数:" + TestInt1.ToString());
            //睡眠10秒,保证方法重入
            System.Threading.Thread.Sleep(300);
            TestInt1++;
            Console.WriteLine("自增1后测试整数:" + TestInt1.ToString());
          }
        }
        /// <summary>
        /// System.Threading.Timer的回调方法
        /// </summary>
        /// <param name="state"></param>
        private static void ThreadingTimerHandler(object state)
        {
          lock (locko)
          {
            Console.WriteLine("测试整数:" + TestInt2.ToString());
            //睡眠10秒,保证方法重入
            System.Threading.Thread.Sleep(300);
            TestInt2++;
            Console.WriteLine("自增1后测试整数:" + TestInt2.ToString());
          }
        }
      }
    }

    更多ASP.NET 定时器回调方法的重入相关文章请关注PHP中文网!

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:asp.net 定时器
    上一篇:C# DataSet.AcceptChanges 方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中关键字有多少个• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误• asp.net 图片验证码的HtmlHelper• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网