当前位置:  开发笔记 > 编程语言 > 正文

线程没有从Thread.Sleep()唤醒

如何解决《线程没有从Thread.Sleep()唤醒》经验,为你挑选了1个好方法。

我们有一个用C#编写的Windows服务.该服务产生一个执行此操作的线程:

private void ThreadWorkerFunction()
{
  while(false == _stop) // stop flag set by other thread
  {
    try
    {
      openConnection();

      doStuff();

      closeConnection();
    }
    catch (Exception ex)
    {
      log.Error("Something went wrong.", ex);

      Thread.Sleep(TimeSpan.FromMinutes(10));
    }
  }
}

当数据库消失后,我们将Thread.Sleep放入了几次,然后我们回到了3Gb日志文件中,这些文件充满了数据库连接错误.

这几个月一直运行良好,但最近我们已经看到一些实例,其中log.Error()语句记录了一个"System.InvalidOperationException:这个SqlTransaction已经完成;它不再可用"异常然后永远不会回来.该服务可以保持运行数天,但不会记录任何其他内容.

做过一些阅读之后,我知道Thread.Sleep并不理想,但为什么它永远不会回来?



1> Sander..:

挖掘并找出答案?把调试器贴在那个混蛋上!

我至少可以看到以下几种可能性:

    日志系统挂起;

    线程退出很好但服务仍在运行,因为其他部分有逻辑错误.

也许,但几乎可以肯定不是,以下内容:

睡觉()挂起.

但无论如何,附加调试器将显示线程是否仍然存在以及它是否真的挂起.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有