避免定时器在复杂的任务中被反复启动的小技巧

我们有时希望设计这样的程序,周期性的访问ftp服务器执行一些文件查询或下载,有时有的ftp服务器网络很好,速度很快,有时有的服务器网络较差,访问较慢,也就是说,查询或下载时间并不稳定,如果把定时器的时间指定为一个固定值,较大的值,时间浪费较多,较小的值,有时没查询完,定时器就启动下一次查询,解决办法也许较多,这里介绍一个非常好的解决办法,很实用,定时器选System.Threading空间下的Timer,在执行后台任务时,这个是最好用的定时器,把period参数设置为TimeOut.Infinite,这时定时器Timer只执行一次,然后在回调方法中,当完成大量复杂任务后,再设置Change方法,把dueTime设置要间隔的时间,把period再次设置为TimeOut.Infinite值,这样定时器再次被设置为执行一次,如此反复。代码见下:

class Program
    {
        private static Timer timer;
        private static CancellationTokenSource cts;
        static void Main(string[] args)
        {
            cts = new CancellationTokenSource();
            timer = new Timer(DoWork, cts, Timeout.Infinite, Timeout.Infinite);
            timer.Change(0, Timeout.Infinite);

            Console.WriteLin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值