作用域

来源:互联网 发布:python渗透测试教程 编辑:程序博客网 时间:2024/06/10 11:59

昨天花了2个小时调试有时候启动了定时轮询,有时候没有启用定时轮询的bug,最后发现竟然是作用域的问题,比较汗颜,下面就是有bug的这个代码的简单写法:

using System;
using System.Timers;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        Begin();
        Console.ReadLine();
    }


    public static void Begin()
    {
        TimerCallback callbackMethod = new TimerCallback(Program.Check);
        int pollCycleInMilliseconds = 180000;
        System.Threading.Timer pollTimer = new System.Threading.Timer(
            callbackMethod, null, pollCycleInMilliseconds, pollCycleInMilliseconds);

    }

    public static void Check(object notUsed)
    {
        Console.Write(DateTime.Now);
    }
}

出bug是因为这里的 System.Threading.Timer pollTimer 是一个局部变量,这个变量出了他的作用域,可能会被销毁以及垃圾回收,这时候,自然就没有了定时轮询的触发了。

实际的代码比这里要复杂很多,是个WEB应用。一直没想到是作用域的问题才导致花了这么长时间找bug。把这个我碰到的bug记录下来,让碰到类似问题的人也好有思路提醒。

原创粉丝点击