解决方案 »

  1.   

     Mutex mutex = new Mutex();
    这一句貌似没什么用,因为这个mutex是一个局部变量,用完以后就释放的。对别的可能”捣乱“的线程没有丝毫约束。共享锁只有”共享"了才有锁。
      

  2.   

    当然,依据你的代码是在Application_Start里初始化的,Application_Start这个方法由asp.net作保证应该不会出现多线程并发问题。
    如果依然出现该单例的地方没有单例,也许是你其他地方也调用了这个方法。或者什么其他原因。
      

  3.   

    听你这么一说好像是放到Web站点上了?定时更新数据最好写成windows service,或者部署到数据库中定时任务,不都挺好的吗?没有见过部署到站点上的。
    .net 站点有一个特殊功能,那就是当长时间不访问的时候就会自动关闭应用程序池。访问的时候会自动打开,你这个 
    Application_Start() 在每次打开时就会执行一次。所以你的业务逻辑已经完全不对了。问题不是出现在Timer多线程上。
      

  4.   

    嗯,确实混乱了,因为这里面的操作有点复杂,放在数据库里不能完成,对windows service只是又太匮乏,就选择放在站点上了,然后就各种问题混乱,唉,学习windows service去了~