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

发布时间 - 2026-01-10 23:09:52    点击率:

话不多说,请看代码:

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  # 定时器  # 定时器回调  # .NET中实现高精度定时器的思路  # .NET中6种定时器的用法与特点详解  # .NET Framework中定时器timer的单线程与多线程使用讲解  # asp.net中Timer无刷新定时器的实现方法  # .NET中的6种定时器的基本用法和特点  # 回调  # 有机会  # 已经开始  # 多说  # object  # locko  # private  # static  # int  # Console  # WriteLine  # Timers  # args  # void  # Main  # string  # csharp  # System  # Collections  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  ,网页ppt怎么弄成自己的ppt?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  企业网站制作这些问题要关注  如何在VPS电脑上快速搭建网站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何使用Collections进行数据处理?(实用方法示例)  教学论文网站制作软件有哪些,写论文用什么软件 ?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何用美橙互联一键搭建多站合一网站?  如何快速上传建站程序避免常见错误?  如何快速选择适合个人网站的云服务器配置?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  手机软键盘弹出时影响布局的解决方法  Android中AutoCompleteTextView自动提示  如何快速搭建个人网站并优化SEO?  昵图网官网入口 昵图网素材平台官方入口  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  手机网站制作与建设方案,手机网站如何建设?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  如何在万网自助建站中设置域名及备案?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel distinct去重查询_Laravel Eloquent去重方法  简单实现Android验证码  网页设计与网站制作内容,怎样注册网站?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  IOS倒计时设置UIButton标题title的抖动问题  Laravel如何升级到最新版本?(升级指南和步骤)  高防服务器租用如何选择配置与防御等级?  动图在线制作网站有哪些,滑动动图图集怎么做?