十分诡异线程监控 或 Timer 监控失效
一,应用流程:
1,查询数据库数据
2,得到数据时生成相应的报表
3,如果没有得到数据则对数据库进行轮巡。
二,类似代码:
主方法:
Thread tn = new Thread(DoFunc);
Tn.Start()
public void DoFunc()
{
while(true)
{
Thread.Sleep(5*1000);
if(有数据)
{
//生成数据
}
}
}
执行效果:
这个服务安装到服务器,每天白天都完全正常运行,没有任何的不正常,第二天查看服务器,该服务就直接挂掉了。都不知道为什么。代码上面也没有任何异常。
个人修改:
改成Timer控件,执行同样的功能,一样会失效。
问题:
1.服务为什么会无缘无故的挂掉,代码上面我实在看不出有什么bug,而且白天都是正常的。
2.用什么来实现这样这样轮巡的功能比较好一点?
------解决方案--------------------1、看try-catch能否捕捉异常。
2、参考Windows的事件日志。
------解决方案--------------------public void DoFunc()
{
while(true)
{
Thread.Sleep(5*1000);
if(有数据)
{
//生成数据
}
}
}
改为
public void DoFunc()
{
while(true)
{
Thread.Sleep(5*1000);
try
{
if(有数据)
{
//生成数据
}
}
catch//捕获异常,并防止因异常导致退出
{
//日志记录
}
}
}
在 7*24 小时服务中,有时会有一些意外情况,比如很多数据库都是凌晨进行大数据分析、备分、整理甚至是重启自维护,这个时候可能会数据读取超时、无法连接。对于这样的需7 * 24小时的服务程序,你必须要多做日志处理和异常捕获。
------解决方案--------------------你真的是写了一个windows 服务么?你的服务是自动启动么?windows服务如果异常关闭会有windows日志。
如果你只是写了个winform的exe那就别说你的这个服务如何如何了。
------解决方案--------------------