C#中关于Timer定时器重入问题的解决方法


本文摘自PHP中文网,作者黄舟,侵删。

项目中用到了定时器随着服务启动作定时任务,按指定的准点时间定时执行相关操作,但是在指定准点时间内我只想让它执行一次,要避免重入问题的发生。

首先简单介绍一下timer,这里所说的timer是指的System.Timers.timer,顾名思义,就是可以在指定的间隔是引发事件。官方介绍在这里,摘抄如下:


1

2

3

4

5

Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发 Elapsed 事件的周期性间隔。然后可通过处理这个事件来提供常规处理。

例如,假设您有一台关键性服务器,必须每周 7 天、每天 24 小时都保持运行。 可以创建一个使用 Timer 的服务,以定期检查服务器并确保系统开启并在运行。

如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员。

    基于服务器的 Timer 是为在多线程环境中用于辅助线程而设计的。

    服务器计时器可以在线程间移动来处理引发的 Elapsed 事件,这样就可以比 Windows 计时器更精确地按时引发事件。

那使用这个计时器有啥好处呢?主要因为它是通过.NET Thread Pool实现的、轻量、计时精确、对应用程序及消息没有特别的要求。

Timer是怎么使用的之前有写过这篇:C# System.Timers.Timer定时器的使用和定时自动清理内存应用

什么叫重入呢?这是一个有关多线程编程的概念:程序中,多个线程同时运行时,就可能发生同一个方法被多个进程同时调用的情况。当这个方法中存在一些非线程安全的代码时,方法重入会导致数据不一致的情况。Timer方法重入是指使用多线程计时器,一个Timer处理还没有完成,到了时间,另一Timer还会继续进入该方法进行处理。

关于定时器的重入问题解决方法尝试如下

阅读剩余部分

相关阅读 >>

c#连接oracle的实例教程

使用c#操作windowad之添加对象到用户组

c#中发送邮件的实现方法详解

c# 5.0引入了两个关键字 --async和await

介绍asp.net使用session的方法

windows登录功能使用c#实现的示例

.net core使用redis发布订阅方法介绍

c#串口通信的实例教程

c# 一些面试试题的实例教程

c#怎么将 html转换为图片或 pdf?

更多相关阅读请进入《csharp》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...