欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-18 14:43:32
话不多说,请看代码: using system; using system.collections.generic; using system.text;...

话不多说,请看代码:

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!