我们有一个用 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 并不理想,但为什么它永远不会回来?